WEBアプリケーション研究室 開発ノート TOP

WEBアプリケーション研究室 開発ノート [PHP]PHPの配列走査ベンチマーク

スポンサーサイト

-------- --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

    このエントリーをはてなブックマークに追加

思ったとおりの結果で面白くもなんともないけど載せておきます。
PHPのバージョンは5.2.14です。

for文 1.7283sec


$array = array(1, 2, 3, 4);
for($i = 0; $i < 1000000; $i++)
{
$count = count($array);
for($j = 0; $j < $count; $j++)
{
$result = $array[$j]+1;
}
}


while1文 6.0947sec

$array = array(1, 2, 3, 4);
for($i = 0; $i < 1000000; $i++)
{
reset($array);
while (list(, $value) = each($array))
{
$result = $value +1;
}
}


while2文 1.5828sec

$array = array(1, 2, 3, 4);
for($i = 0; $i < 1000000; $i++)
{
$count = count($array);
while (--$count >= 0)
{
$result = $array[$count] +1;
}
}


array_walk文 6.0818sec

$array = array(1, 2, 3, 4);
for($i = 0; $i < 1000000; $i++)
{
array_walk($array, array($this, '_test'));
}

//callbackの中身
private function _test(&$value)
{
$result = $value +1;
}


本命?foreach文 1.0295sec

$array = array(1, 2, 3, 4);
for($i = 0; $i < 1000000; $i++)
{
foreach($array as $value)
{
$result = $value +1;
}
}


while1はlist(, $value) = each($array)が重そうなのは分かるけど、array_walkはもう少し早くてもいいかなと思いました。foreachは最初に配列をコピーしてるらしいので、配列を大きめにしたら2位のwhile2とそう変わらなかったです。

foreach 1.9214sec
while2 2.1149sec

$array = range(0, 1000);
for($i = 0; $i < 10000; $i++)
{
//上記テストと同じ文
}
スポンサーサイト

    このエントリーをはてなブックマークに追加
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。