今日、友人が配列を走査するための PHP メソッドについて質問したので、いくつか説明しました。ちなみにまとめ記事を書きますので、まとめが不完全な場合はご指摘ください
。まずはforeach()
foreach() は、配列内のデータを走査するための最も単純かつ効果的な方法です。
?
1 2 3 4 5 6 |
$urls= array('aaa','bbb','ccc','ddd'); foreach ($urls を $url){ echo "このサイトの URL は $url です! } ?> |
表示結果:
?
1 2 3 4 |
このサイトのURLはaaaです このサイトのURLはbbbです このサイトのURLはcccです このサイトのURLはdddです |
第二に、while() は list() および each() と組み合わせて使用されます。
?
1 2 3 4 5 6 |
$urls= array('aaa','bbb','ccc','ddd'); while(list($key,$val)= each($urls)) { echo "このサイトの URL は $val です。 } ?> |
表示結果:
?
1 2 3 4 |
このサイトのURLはaaaです このサイトのURLはbbbです このサイトのURLはcccです このサイトのURLはdddです |
3 番目に、for() は for を使用して配列を走査します
?
1 2 3 4 5 6 7 |
$urls= array('aaa','bbb','ccc','ddd'); for ($i= 0;$i $str= $urls[$i]; echo "このサイトの URL は $str. } ?> |
表示結果:
?
1 2 3 4 |
このサイトのURLはaaaです このサイトのURLはbbbです このサイトのURLはcccです このサイトのURLはdddです |
配列を走査するこれらの方法のどちらが速いか尋ねられることもあります。簡単なテストをしてみましょう。そうすれば理解できるでしょう。
============ 配列を移動する 3 つの速度をテストしてみましょう ===========一般に、配列を走査するには、for、while、foreach の 3 つのメソッドがあります。その中で最もシンプルで便利なのは foreach です。まず、50,000 個の添字を持つ 1 次元配列を走査するのにかかる時間をテストしてみましょう。
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
$arr= 配列(); 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 } $time_end= GetRunTime(); $time_used= $time_end- $time_start; echo '使用時間:'.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 'その間の使用時間:'.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) '; ?>
|
?
1 2 3
|
使用時間:0.0228429(s) その間の使用時間:0.0544658(s) foreachの使用時間:0.0085628(s)
|