foreach 快 还是 array_walk 快? 应该是 array_walk 吧? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 说的是 foreach 循环 操作值 还是直接用 array_walk... array_walk 能做的 foreach 都能做到foreach 能做的 array_walk 不一定能做,例如增加/删除单元 测试代码<?phpfunction a() { $array = array(1, 2, 3, 4, 5); for($i = 0; $i < 1000000; $i ++) { $tmp = array(); foreach($array as $e) $tmp[] = $e * $e; } }function b() { $array = array(1, 2, 3, 4, 5); for($i = 0; $i < 1000000; $i ++) { $tmp = $array; array_walk($tmp, function(&$v) {$v *= $v;}); } }$start = microtime(true);a();$end = microtime(true);echo 'foreach total time: ' . ($end - $start) . chr(10);$start = microtime(true);b();$end = microtime(true);echo 'array_walk total time: ' . ($end - $start) . chr(10);?>测试输出foreach total time: 4.1798651218414array_walk total time: 10.291253089905结论#上述情况下, foreach的性能是array_walk的2.5倍左右#array_walk会多出一个函数调用的消耗. 所以会多一点..#不过平时可以忽略, 因为100万次才多6秒, 也就是一次耗时在10^-5数量级之内... ccnow接口,求指教,在线等 PHP下mysql数据库查询结果访问的问题 怎么控制 文本框只能录入四位数字 php网站后台用户的权限信息用什么存储比较好 一天javascript不执行,是不是代码写错了 简单问题,帮忙写个正则相关的判断 请教下mysql里输入中文的问题,某些中文无法输入 请问一个调用远程mysql数据库的问题,请大家多多指教! 请教一个nginx的rewrite规则 filezilla连接远程服务器超时 如何进行多张表查询问题 传值问题
foreach 能做的 array_walk 不一定能做,例如增加/删除单元
function a() {
$array = array(1, 2, 3, 4, 5);
for($i = 0; $i < 1000000; $i ++) {
$tmp = array();
foreach($array as $e)
$tmp[] = $e * $e;
}
}
function b() {
$array = array(1, 2, 3, 4, 5);
for($i = 0; $i < 1000000; $i ++) {
$tmp = $array;
array_walk($tmp, function(&$v) {$v *= $v;});
}
}
$start = microtime(true);
a();
$end = microtime(true);
echo 'foreach total time: ' . ($end - $start) . chr(10);
$start = microtime(true);
b();
$end = microtime(true);
echo 'array_walk total time: ' . ($end - $start) . chr(10);
?>测试输出
foreach total time: 4.1798651218414
array_walk total time: 10.291253089905
结论#上述情况下, foreach的性能是array_walk的2.5倍左右
#array_walk会多出一个函数调用的消耗. 所以会多一点..
#不过平时可以忽略, 因为100万次才多6秒, 也就是一次耗时在10^-5数量级之内...