欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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 这个函数的巧妙运用。
 都说脚本语言效率差,其实,很多时候,我们是在不知不觉中浪费。如果我们能时刻考虑效率,那么,速度仍是可以让人满意的。