简单分析一下是用array_map好,还是foreach大法好:
实验前先准备数组 $a 和 $b ,每个数组都有 1024个key
$a = [['a'=>1]];
$b = [['b'=>2]];
for($i = 1;$i<=10;$i++){
$a = array_merge($a,$a);
$b = array_merge($b,$b);
}
目标:把$a 和 $b 结合成一个新数组
先看看用foreach大法处理,
//程序运行时间
$t1 = microtime(true);
$new_arr = [];
foreach($a as $k=>$v){
$new_arr[] = array_merge($v,$b[$k]);
}
$t2 = microtime(true);
echo '耗时 '.($t2-$t1).' <br>'."\n";
array_map 处理
$t1 = microtime(true);
$new_arr = array_map('array_merge',$a,$b);
$t2 = microtime(true);
echo 'array_map:耗时 '.($t2-$t1).' <br>'."\n";
array_map 换一种写法:
$t1 = microtime(true);
$new_arr = array_map(function ($v1,$v2){
return array_merge($v1,$v2);
},$a,$b);
$t2 = microtime(true);
echo 'array_map写法2:耗时 '.($t2-$t1).' <br>'."\n";
当前测试环境php版本:
PHP 7.0.12 (cli) (built: Oct 13 2016 11:04:07) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
运行结果:
运行了8次的结果,发现 array_map在写法不同,耗时也不一样,基本上foreach介于两种写法之间,
虽然本次测试可能具有片面性,但是笔者认为,如果不考虑性能的,从代码优雅性,优先选择自带函数array_map,
简洁的代码能解决的问题,为何要满篇的foreach