为什么我的array_filter()比foreach()和if()慢?

时间:2018-03-16 08:48:41

标签: php performance

我有一个“大”字符串数组,需要找到那些内容指定字符串的元素。

在测试期间,我注意到array_filter比“foreach和if”慢得多。

这是我的测试代码:

<?php

//Fill array for test by random string
$arr=array();
for($i=0;$i<1000000;$i++) $arr[]="str1".rand(0,999999)."str2";

//Search value
$q='555';

//Test search by foreach and if
$stime=microtime(true);
$res=array();
foreach ($arr as $key=>$val) {
    if (strpos($val, $q) !== FALSE)
        $res[$key]=$val;
}
//print_r($res);
echo "\n".(microtime(true)-$stime);

//Test search by array_filter
$stime=microtime(true);
$res = array_filter($arr, function ($val) use ($q) { return (strpos($val, $q) !== FALSE); } );
//print_r($res);
echo "\n".(microtime(true)-$stime);

0.10 vs 0.18。 foreach +如果在~1.8中更快。

我在不同服务器上的php5.6和php7上查了一下。数字当然不同,但乘数在范围内(1.7,2.1)。

为什么array_filter会变慢?我认为它必须至少相同。或者通过针对特定任务的优化更快。

还有提高速度吗? 也许我在array_filter()

中做得不好

Pleace注意到了。 这不是关于strpos,检查的功能必须是另一个。

数据不在MySQL或其他,它来了一次,需要尽快检查一次。在数据库中存档,索引等会增加整个任务的时间。

这不是要改变整个阵列。只是找几个元素。通常超过10个。

如果finded元素的数量更大,也会有更大的差异。

这只是关于如何提高搜索性能(array_filter)。

0 个答案:

没有答案