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('4',2); $a[] = "2.3"; $a[] = "-1"; $a[] = new Directory(); ?>
3 つを使用します 配列内の要素を変換します変換ステータスを確認するために、上記の順序で入力します。プログラムのソースコードは次のとおりです。
<?php $a[] = "1"; $a[] = "a1"; $a[] = "1a"; $a[] = "1a2"; $a[] = "0"; $a[] = array('4',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';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';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 サイトの他の関連記事を参照してください。