ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

PHPのwhileとforeach

PHPの配列総なめの書き方で、自分はいつも

 foreach($ary as $key => $val) ...
だったけれど、いろんなサイト見て回ると

 while($list($key,$val) = each($ary)) ...
みたいな書き方をよく見かけた。

1年ぐらいPHP触ってたけど、これ見るまでeach関数なんて知らなかった。
(車の免許とって3週間目みたいな、慣れてきたせいで
 一番事故起こしやすいレベルのPHP歴なんだろうなぁ)

なんかくやしかったので、
配列長100,000を二つの方法でループさせて時間計測。

while time: 0.34173083305359
foreach time: 0.11416602134705
(while/foreach)*100 = 299.32796905901

foreach time: 0.08992600440979
while time: 0.33068990707397
(while/foreach)*100 = 367.73557242356
(PHP5.1.6 Apache/2.2.3)

何回やってもforeachのほうが3~4倍早かった!
よし、くやしくなくなった。


コード
<?php
$time_while = 0;
$time_foreach = 0;

//ループさせる配列長
$length=100000;

//whileを先に計測----------------------------
$time_while = execute_while($length);
$time_foreach = execute_foreach($length);

echo "while time: ${time_while}\n";
echo "foreach time: ${time_foreach}\n";
echo "(while/foreach)*100 = ". ($time_while/$time_foreach)*100 ."\n";
echo '\n';

//foreachを先に計測--------------------------
$time_foreach = execute_foreach($length);
$time_while = execute_while($length);

echo "foreach time: ${time_foreach}\n";
echo "while time: ${time_while}\n";
echo "(while/foreach)*100 = '. ($time_while/$time_foreach)*100 ."\n";
echo '\n';
exit();

//現在時刻を取得する関数
function getmicro(){
  list($msec, $sec) = explode(" ", microtime());
  return ((float)$sec + (float)$msec);
}
//whileでlength回ループする関数
function execute_while($length){
  //配列作成
  $ary = array();
  for($i=0; $i<$length; $i++) $ary[] = "num.$i";
  //計測開始
  $time = getmicro();
  while(list($key, $val) = each($ary)) $ary[$key] = $val .= "read";
  return getmicro() - $time;
}

//foreachでlength回ループする関数
function execute_foreach($length){
  //配列作成
  $ary = array();
  for($i=0; $i<$length; $i++) $ary[] = "num.$i";
  //計測開始
  $time = getmicro();
  foreach($ary as $key=>$val) $val .= "read";
  return getmicro() - $time;
}
?>




スポンサーサイト
  1. 2007/01/09(火) 20:19:57|
  2. その他
  3. | トラックバック:0
  4. | コメント:2
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。