ホームページ > バックエンド開発 > PHPチュートリアル > PHP が文字列を整数に変換する方法とパフォーマンス テストの例の詳細な説明

PHP が文字列を整数に変換する方法とパフォーマンス テストの例の詳細な説明

伊谢尔伦
リリース: 2023-03-10 22:26:01
オリジナル
1591 人が閲覧しました

PHP では、文字列を整数に変換するために 3 つの方法を使用できます。
1.強制型変換メソッド
強制型変換とは、「変換する変数の前に括弧で囲った対象の型を追加する」というメソッドです。

<?php 
$foo = "1"; // $foo 是字符串类型 
$bar = (int)$foo; // $bar 是整型 
?>
ログイン後にコピー

整数の場合、強制変換型名は int または integer です。
2.組み込み関数メソッド
組み込み関数メソッドは、PHPの組み込み関数intvalを利用して変数を変換する方法です。

<?php 
$foo = "1"; // $foo 是字符串类型 
$bar = intval($foo); // $bar 是整型 
?>
ログイン後にコピー

intval 関数の形式は次のとおりです:
int intval(mixed $var [, int $base]);
PHP マニュアルには、配列とオブジェクトの変換には intval() を使用できないと明記されています。しかし、テストした結果、配列の変換時に問題は発生しません。変換された値は予想どおり 0 ではなく 1 です。 PHP 内では、配列型変数もゼロ以外の値を持つとみなされるためだと思います。

オブジェクトを変換するとき、PHPは次の通知を出します:
クラスxxxxのオブジェクトはxxxxx.phpのxx行目でintに変換できませんでした
変換値も1です。
3.文字列のフォーマットメソッド
文字列のフォーマットメソッドは、sprintfの%dを使用して、型変換の目的を達成するために指定された変数をフォーマットします。

<?php 
$foo = "1"; // $foo 是字符串类型 
$bar = sprintf("%d", $foo); // $bar 是字符串类型 
?>
ログイン後にコピー

厳密に言えば、sprintf の変換結果は文字列型のままなので、文字列を整数に変換する方法としてみなすべきではありません。しかし、彼の処理後の文字列値は確かに「強制的に文字列型に変換された整数」になっています。

普通のプログラマはこれを見れば終わりですが、一部の異常なプログラマのために次のパフォーマンステストについて話しましょう:

1. 基本的な機能テスト
次の配列を設定します:

<?php 
$a[] = "1"; 
$a[] = "a1"; 
$a[] = "1a"; 
$a[] = "1a2"; 
$a[] = "0"; 
$a[] = array(&#39;4&#39;,2); 
$a[] = "2.3"; 
$a[] = "-1"; 
$a[] = new Directory(); 
?>
ログイン後にコピー

3 つを使用します 配列内の要素を変換します変換ステータスを確認するために、上記の順序で入力します。プログラムのソースコードは次のとおりです。

<?php 
$a[] = "1"; 
$a[] = "a1"; 
$a[] = "1a"; 
$a[] = "1a2"; 
$a[] = "0"; 
$a[] = array(&#39;4&#39;,2); 
$a[] = "2.3"; 
$a[] = "-1"; 
$a[] = new Directory(); 
// int 
print "(int)<br />"; 
foreach($a as $v) 
{ 
var_dump((int)$v); 
print "<br />"; 
} 
// intval 
print "intval();<br />"; 
foreach($a as $v) 
{ 
var_dump(intval($v)); 
print "<br />"; 
} 
// sprintf 
print "sprintf();<br />"; 
foreach($a as $v) 
{ 
var_dump(sprintf("%d", $v)); 
print "<br />"; 
} 
?>
ログイン後にコピー

プログラムの最終的な実行結果は次のとおりです (オブジェクトの変換時に表示される通知は削除されています):

(int) 
int(1) 
int(0) 
int(1) 
int(1) 
int(0) 
int(1) 
int(2) 
int(-1) 
int(1) 
intval(); 
int(1) 
int(0) 
int(1) 
int(1) 
int(0) 
int(1) 
int(2) 
int(-1) 
int(1) 
sprintf(); 
string(1) "1" 
string(1) "0" 
string(1) "1" 
string(1) "1" 
string(1) "0" 
string(1) "1" 
string(1) "2" 
string(2) "-1" 
string(1) "1"
ログイン後にコピー

3 つの変換の結果が次のとおりであることがわかります。まったく同じ。機能的に言​​えば、3 つのメソッドはすべて変換作業が可能であるため、次のステップはどれがより効率的であるかを確認することです。

2. パフォーマンステスト

<?php 
$foo = "1&#39;;Select * ..."; 
?> 
  获取时间点的函数如下(用于获取测试起始点和结束点,以计算消耗时间): 
<?php 
** 
* Simple function to replicate PHP 5 behaviour 
*/ 
function microtime_float() 
{ 
list($usec, $sec) = explode(" ", microtime()); 
return ((float)$usec + (float)$sec); 
} 
?>
ログイン後にコピー

テストプロセスは、各メソッドを使用して変数 $foo を 1,000,000 回 (100 万回) 変換し、それぞれの消費時間を削減するために合計 3 セットのテストが実行されます。可能な限りエラーを出します。テスト プログラムは次のとおりです:

<?php 
function microtime_float() 
{ 
list($usec, $sec) = explode(" ", microtime()); 
return ((float)$usec + (float)$sec); 
} 
$foo = "1&#39;;Select * ..."; 
// (int) 
$fStart = microtime_float(); 
for($i=0;$i<1000000;$i++) 
{ 
$bar = (int)$foo; 
} 
$fEnd = microtime_float(); 
print "(int):" . ($fEnd - $fStart) . "s<br />"; 
// intval() 
$fStart = microtime_float(); 
for($i=0;$i<1000000;$i++) 
{ 
$bar = intval($foo); 
} 
$fEnd = microtime_float(); 
print "intval():" . ($fEnd - $fStart) . "s<br />"; 
// sprintf() 
$fStart = microtime_float(); 
for($i=0;$i<1000000;$i++) 
{ 
$bar = sprintf("%d", $foo); 
} 
$fEnd = microtime_float(); 
print "sprintf():" . ($fEnd - $fStart) . "s<br />"; 
?>
ログイン後にコピー

最終テスト結果:

(int):0.67205619812012s 
intval():1.1603000164032s 
sprintf():2.1068270206451s 
(int):0.66051411628723s 
intval():1.1493890285492s 
sprintf():2.1008238792419s 
(int):0.66878795623779s 
intval():1.1613430976868s 
sprintf():2.0976209640503s
ログイン後にコピー

強制型変換を使用して文字列を整数に変換するのが最も高速であることがわかります。

以上がPHP が文字列を整数に変換する方法とパフォーマンス テストの例の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート