就性能而言,哪个选项更好?
在物体中时:
案例#1
public function test( $array ) {
return array_map( array( $this, 'do_something_to_element' ), $array );
}
案例#2
public function test( $array ) {
$return = array();
foreach ( $array as $value ) {
$return[] = do_something_to_element( $value );
}
return $return;
}
当然,还有其他用途,可以填充许多示例。我看到有评论说,在对象中,array_map比foreach循环慢。
通常情况下,array_map/array_walk函数的执行速度是否比有类似需求的foreach循环更快?
对于记录(php 7.4+64位+窗口)
https://github.com/EFTEC/php-benchmarks/blob/master/benchmark_arraymap_foreach.php
- foreach=0.10213899612427
- array_map=0.18259811401367
- array_map(静态)=0.18230390548706
- array_map(调用函数)=0.17731499671936
Foreach仍然更快,但如果我们使用静态函数或不使用静态函数,也不会有任何区别:
$result = array_map(function ($number) {
return $number * 10;
}, $numbers);
$result = array_map(static function ($number) {
return $number * 10;
}, $numbers);
我刚刚在Symfony项目上测试了这个,因为它看起来很重要,所以不得不用谷歌搜索。脚本从使用foreach()
的160ms变为使用array_map()
的260ms
我现在在这里,因为我在谷歌上搜索了以下单词:"php 8 foreach最快";和不要威胁他的问题是重复的,请因为我在所有php版本中都写了世界上最快的php框架(经典的结构、oop、oop-at-sum-based静态公共函数),特别是在php 7中,array_filter i每次使用都比foreach快,现在我在xampwindows10x64中使用相同的方法进行基准测试,并且在foreach上获得了最快的结果。所以你的问题的答案是YES INDED is FOREACH FASST,所以在php 8中使用base that,在php 7或更低版本中使用其他代码!!!
这是代码i测试的版本(我修改了一个简单的脚本,在屏幕上弹出所有新的引导程序图标1.4.1):
我测试的第一段代码,如果你取消注释它的部分和正确的组合部分,你会有一些小的差异,但想法仍然是一样的
$icons.=<<<icon
{$pa} {$pa2}
icon;
/*
$icons.=<<<icon
{$pa}
icon;
*/
//});
//},ARRAY_FILTER_USE_KEY);
},ARRAY_FILTER_USE_BOTH);
print_r($icons);
//0.00001200
等效代码i测试
$icons='';
foreach([0=>1,1=>99] as $ch => $vl){
$icons.=<<<icon
{$ch} {$vl}
icon;
}
print_r($icons);
//0.00000694
我用一个";插件";即兴创作=在编辑器中使用.exe purebasic调用的cli php代码不具有插件功能(editplus),但具有用户文本过滤器,因此您可以在每个脚本的末尾看到php脚本的结果:
if ($argv[1]=='bench'){
$cmd=cmd(1);
ob_start();
$start= microtime(true);
for($i=0;$i<10000;$i++) eval($cmd);
$stop= microtime(true);
ob_clean ();
echo PHP_EOL.'//'. number_format(($stop-$start)/10000, 8, '.', '');
}
我是一个公共静态函数";消费者;也是<强烈>欢呼强烈>