`
bardo
  • 浏览: 371663 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
D1407912-ab64-3e76-ae37-b31aa4afa398
浅述PHP设计模式
浏览量:11594
9d6df9f7-91da-3787-a37c-0e826525dd5d
Zend Framewor...
浏览量:9970
85b628bd-a2ed-3de2-a4b1-0d34985ae8b6
PHP的IDE(集成开发环...
浏览量:9326
社区版块
存档分类
最新评论

PHP数组快速筛选函数的实现

    博客分类:
  • PHP
阅读更多

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

 

 

 

 

 

 

 

 

1
7
分享到:
评论
2 楼 bardo 2011-03-02  
是个不错的想法,这样就更快了。谢谢
1 楼 ivwsai 2011-02-28  
为什么
$retArray = array_combine ($keys , array_fill(0,count($keys),0) ); 
不写成
$retArray = array_flip($keys);

相关推荐

    php实现数组筛选奇数和偶数示例

    从数字数组中筛选出奇数或者偶数的小函数。 复制代码 代码如下:<?phpfunction pick_one_side($arr, $need_odd){ return array_filter($arr, function($item) use($need_odd){ return $need_odd ? ($item & 1) ...

    php中奖概率算法函数类.zip

    介绍一个php中奖概率算法函数类。 经典的概率算法,  * $proArr是一个预先设置的数组,  * 假设数组为:array(100,200,300,400),  * 开始是从1,1000 这个概率范围内筛选第一个数是否在他...

    PHP查找与搜索数组元素方法总结

    查找、筛选与搜索数组元素是数组操作的一些常见功能。下面来介绍一下几个相关的函数。 in_array()函数 in_array()函数在一个数组汇总搜索一个特定值,如果找到这个值返回true,否则返回false。其形式如下: boolean ...

    php 数组操作(增加,删除,查询,排序)等函数说明第1/2页

    如果满足,则生成新的数组,这个新的数组就是满足查询条件的,条件:查询,并不是查询某一个值,还有查询某一个值满足某个条件,举个例子:查询数组中某个值大于5的,全部筛选出来) 1、php中的数组实质上是map结构,...

    php中奖概率算法函数类

    一个php中奖概率算法函数类。 经典的概率算法, * $proArr是一个预先设置的数组, * 假设数组为:array(100,200,300,400), * 开始是从1,1000 这个概率范围内筛选第一个数是否在他的出现概率范围之内, * 如果...

    中奖概率算法的php函数类.zip

    $proArr是一个预先设置的数组,假设数组为:array(100,200,300,400),开始是从1,1000 这个概率范围内筛选第一个数是否在他的出现概率范围之内,如果不在,则将概率空间,也就是k的值减去刚刚的那个数字的概率空间,...

    PHP程序开发范例宝典III

    实例191 通过函数实现单击页码跳转到指定页 300 实例192 添加图书类的实现 302 第8章 SQL查询相关技术 305 8.1 数据库操作 306 实例193 创建数据库 306 实例194 查看数据库 307 实例195 删除数据库 ...

    [示例][PHP]中奖概率算法的php函数类.zip

    $proArr是一个预先设置的数组,假设数组为:array(100,200,300,400),开始是从1,1000 这个概率范围内筛选第一个数是否在他的出现概率范围之内,如果不在,则将概率空间,也就是k的值减去刚刚的那个数字的概率空间,...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    每个实例都经作者精心筛选,具有很强的实用性,其中一些实例是开发人员难于寻觅的解决方案。   本书适合PHP的初学者,如高校学生、求职人员作为练习、速查、学习使用,也适合PHP程序员参考、查阅。 目 录 目录:...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    每个实例都经作者精心筛选,具有很强的实用性,其中一些实例是开发人员难于寻觅的解决方案。   本书适合PHP的初学者,如高校学生、求职人员作为练习、速查、学习使用,也适合PHP程序员参考、查阅。 目 录 目录:...

    Simple-DB:MySQL的小型PHP库。 简单选择,插入,更新和删除

    在开始之前,对不起,如果我不够清楚... 它将返回关联数组,如下所示; ID 年级 分支 12 11 在 13 11 在 14 11 提单 15 9 C 16 12 提单 筛选 如果要过滤,也很简单。 要选择特殊列,只需将其添加到$ Colu

    carbon-breadcrumbs-woocommerce:碳面包屑插件的WooCommerce扩展

    $ args (数组) 调用面包屑函数的args。 $ template_path (字符串) 。 模板的路径。 $ default_path (字符串) 。 模板的默认路径。 该过滤器是WooCommerce的默认过滤器,在加载特定模板之前应用。 它允许您...

    jquery插件使用方法大全

    同一函数实现get\set ajax 渐入淡出 plugin 历史版本 1、新的事件.on() .off() 3、动画的改进 1.42版介绍 JQuery插件 让Dreamweaver支持提示代码功能 引入JQuery简介 找到你了! Jquery对象 代替body标签的onload ...

    UWA 2.X UTF-8 (v2.1.5_to_v2.2.0) 升级程序.zip

    [更改]POSITON改为$_CP数组, 自定义模板 [修复]修复任务js和会员信息js 的 Content-Type:application/x-javascript; [增强]自定义跳转及404页面模板 [完善]完善强制静态判断 [更改]会员中心模板结构更改,...

Global site tag (gtag.js) - Google Analytics