ホームページ >バックエンド開発 >PHPチュートリアル >foreach、while、for_PHP のパフォーマンス比較チュートリアル

foreach、while、for_PHP のパフォーマンス比較チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:35:461224ブラウズ

一般に、配列を走査するには、for、while、foreach の 3 つのメソッドがあります。その中で最もシンプルで便利なのは foreach です。では、それらの操作とパフォーマンスにはどのような違いがあるのでしょうか?通常、どちらの方法を使用するのが良いでしょうか?
まず、50,000 個の添字を持つ 1 次元配列を走査するのにかかる時間をテストしてみましょう:

テストプラットフォーム:
CPU: P-M 725
メモリ: 512M
ハードディスク: 40G 5400 rpm
OS: Windows XP SP2
WEB: apache 2.0.54 php5.0.4

テストコード:
/*
* @ 著者: Lilov
* @ ホームページ: www.codesky.com
* @ 電子メール: zhongjiechao@gmail.com
*
*/

$arr = array();
for($i = 0; $i <50000; $i++){
$arr[] = $i*rand(1000,9999);
}

関数 GetRunTime()
{
list($usec,$sec)=explode(" ",microtime());
return ((float)$usec+(float)$sec);
}
##### ##############################
$time_start = GetRunTime();

for($i = 0; $i $str .= $arr[$i];
}

$time_end = GetRunTime();
$time_used = $time_end - $time_start;

echo for:.round($time_used, 7).(s)

;
unset($str, $time_start, $time_end, $time_used);
####の使用時間##############################
$time_start = GetRunTime();

while(list($key, $val) = each($arr)){
$str .= $val;
}

$time_end = GetRunTime();
$time_used = $time_end - $time_start;

echo while の使用時間:.round($time_used, 7).(s)

;
unset($str, $key, $val, $time_start, $time_end, $time_used);
###################################
$time_start = GetRunTime();

foreach($arr as $key => $val){
$str .= $val;
}

$time_end = GetRunTime();
$time_used = $time_end - $time_start;
echo foreach:.round($time_used, 7).(s)

;
### の使用時間##################################

?>

テスト結果:

3 つのテスト結果を平均します:
それぞれ for、while、および foreach に対応します
0.1311650
0.1666853
0.1237440

テストを繰り返した結果、同じ配列を走査する場合、foreach が最も速く、while が最も遅いことがわかりました。 foreach は while よりも約 20% ~ 30% 高速です。次に、配列の添え字を 500000 と 5000000 に増やしても、テスト結果は同じです。しかし、原理的な観点から見ると、foreach は (配列をコピーすることによって) 配列のコピーを操作しますが、while は配列の内部インデックスを移動することによって操作します。一般的に、while は foreach よりも高速であると考えられています。 foreach は最初に配列がコピーされる場所を配置し、while は内部ポインタを直接移動します) が、結果はまったく逆になります。その理由は、foreach が PHP の内部実装であるのに対し、while は一般的なループ構造であるためです。

したがって、一般的なアプリケーションでは、シンプルで効率的な foreach フォームを使用することを好みます。 PHP5 では、foreach はクラスの属性をトラバースすることもできます。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/508306.html技術記事一般に、配列を走査するには、for、while、foreach の 3 つのメソッドがあります。その中で最もシンプルで便利なのは foreach です。では、操作とパフォーマンスの違いは何ですか? 通常はそれを使用します...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。