PHP数组快速筛选函数的实现
程序员文章站
2022-05-11 10:14:41
...
PHP数组,是相当快的,巧妙运用数组函数,可以省去很多FOR循环。并且能加快程序的速度。
基本的数组函数是如何使用,我们就不讲了,完全可以查文档。但是,PHP数组中的函数array_filter则是一个很慢的函数。
为什么会慢,想想便知。我们都清楚,FOR循环中执行正则表达式都是很慢的,何况FOR循环中执行一个你写的函数呢?更不用想,一个初学者写的函数了。
然而,象array_filter这样的算法,是很多场合要用到的。有没有办法加快呢?办法是有的,并且,很多场合是不需要使用array_filter的。
比如,我们用scandir获取了文件列表。如何按我们的要求过滤扩展名呢?如果用array_filter,则又把我们从scandir获得的快速给浪费掉了。
所以,这里给大家提供两个快速数组过滤函数。一个是过滤数值的。一个是过滤键名的。
//fast filtering values of a array function fast_array_filter($array,$partten){ $partten = '/' . preg_quote($partten) .'/'; return preg_grep ($partten, $array); } //fast filtering keys of a array function fast_array_keys_filter($array,$partten){ $partten = '/' . preg_quote($partten) .'/'; $keys = preg_grep($partten,array_keys($array)); //$retArray = array_combine ($keys , array_fill(0,count($keys),0) ); $retArray = array_flip($keys) return array_intersect_key($array,$retArray); }
时间是从哪里省下的?第一个函数,只用了一个preg_grep,这就是说,直接在C语言编译好的PHP底层运算。根本不用在PHP代码中FOR循环。第二个函数也一样。用了5个PHP的函数。而没有自己写的代码。自己不循环,速度自然就上来了。
当然,这两个函数并不是万能的,因为,它的过滤参数必须是正则表达式,如果正则过滤不了,它也就做不成了。这里的关键是 preg_grep 这个函数的巧妙运用。
都说脚本语言效率差,其实,很多时候,我们是在不知不觉中浪费。如果我们能时刻考虑效率,那么,速度仍是可以让人满意的。
上一篇: HTML5中map标签小案列
下一篇: ssm中逆向工程与分页的应用