/**
* Origin:
* array(
* array('id' => 'x', 'name' => 'apple'),
* array('id' => 'y', 'name' => 'banana'),
* array('id' => 'z', 'name' => 'orange'),
* );
* Expect:
* array(
* 'x' => 'apple',
* 'y' => 'banana',
* 'z' => 'orange',
* );
*/
function calc($t0, $t1)
{
$v0 = array_sum(explode(' ', $t0));
$v1 = array_sum(explode(' ', $t1));
$sub = $v1 - $v0;
echo "$v1 - $v0 = $sub\n";
return $sub;
}
$origin = array(
array('id' => 'x', 'name' => 'apple'),
array('id' => 'y', 'name' => 'banana'),
array('id' => 'z', 'name' => 'orange'));
$t0 = microtime();
for ($i = 0; $i < 1E6; $i++) {
$expect = array();
foreach ($origin as $o) {
$expect[$o['id']] = $o['name'];
}
}
$t1 = microtime();
$method1 = calc($t0, $t1); // output: 1420770579.8306 - 1420770578.0456 = 1.785040140152
$t0 = microtime();
for ($i = 0; $i < 1E6; $i++) {
$expect = array_reduce($origin, function ($result, $item) {
$result[$item['id']] = $item['name']; return $result; });
}
$t1 = microtime();
$method2 = calc($t0, $t1); // output: 1420770588.2167 - 1420770579.8308 = 8.3859748840332
echo ($method2 - $method1) / $method2; // output: 0.78713981798936
從測試中可以知道,使用 array_reduce() 比之 for-loop 較慢,雖然看起來比較簡潔。
PHP 5.3.24 (cli) (built: Jun 10 2013 16:42:20)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2013 Zend Technologies
with Xdebug v2.2.0rc1, Copyright (c) 2002-2012, by Derick Rethans
沒有留言:
張貼留言