我得到這個代碼:雖然&list&each組合比array_walk和foreach在PHP上快得多嗎?
<?php
// Test results
$array1 = test('array_walk');
$array2 = test('array_walk_list_each');
$array3 = test('array_walk_foreach1');
$array4 = test('array_walk_foreach2');
// Check arrays for equal
var_dump($array1 == $array2, $array1 == $array3, $array1 == $array4);
// Test function 1
function array_walk_list_each(&$array, $function, $userData = null) {
while (list($key, $value) = each($array))
$function($array[$key], $key, $userData);
}
// Test function 2
function array_walk_foreach1(&$array, $function, $userData = null) {
foreach ($array as $key => &$value)
$function($value, $key, $userData);
}
// Test function 3
function array_walk_foreach2(&$array, $function, $userData = null) {
foreach ($array as $key => $value)
$function($array[$key], $key, $userData);
}
function some_function(&$value, $key, $userData) {
$value = "$key => $userData";
}
function test($function, $count = 10000, $arrayElements = 1000) {
echo $function, ' ... ';
$array = array_fill(0, $arrayElements, "some text value");
$timer = microtime(true);
for($i = 0; ++$i < $count;)
$function($array, 'some_function', 'some user data');
printf("%.3f sec\n", microtime(true) - $timer);
return $array;
}
的這個輸出是非常困難的,我明白了:
array_walk ... 1.024 sec
array_walk_list_each ... 0.002 sec
array_walk_foreach1 ... 1.135 sec
array_walk_foreach2 ... 1.359 sec
bool(true)
bool(true)
bool(true)
這些功能之間的性能差異也幾乎是一個笑話。
這怎麼可能?難道我做錯了什麼?
我從使用PHP 7.0
您認爲您在四個函數中迭代數組有多少次?你認爲這對失去三個人是公平的嗎?獲勝函數中的重置($ array)是否會改變? SIA有點自鳴得意。 – jh1711
@ jh1711發佈解答問題的答案。 – Barmar
@Barmer好的我會 – jh1711