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

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);

相关推荐

    js解析php数组对象数组对象数组对象.docx

    - `filter()`: 创建一个新数组,其包含通过所提供函数实现的测试的所有元素。 ```javascript var arr = [1, 2, 3, 4, 5, 6]; var evenNumbers = arr.filter(function (value) { return value % 2 === 0; }); ...

    php数组函数序列之array_intersect() 返回两个或多个数组的交集数组

    `array_intersect()` 是 PHP 中一个非常实用的数组处理函数,它的主要作用是找出两个或多个数组之间的交集。交集是指存在于所有数组中的相同元素。这个函数在处理多个数据源时,尤其在需要筛选出共同元素的情况下...

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

    示例代码展示了如何定义一个筛选函数`pick_one_side`,该函数接受两个参数:一个数组`$arr`和一个布尔值`$need_odd`。根据`$need_odd`的值,函数返回数组中所有的奇数或偶数。 ```php function pick_one_side($arr,...

    PHP array_flip() 删除重复数组元素专用函数

    `PHP` 的 `array_flip()` 函数是一种独特的数组操作函数,它主要用于交换数组中的键(key)和值(value)。这个函数在处理某些特定场景,如数据转换或删除重复元素时,能发挥重要作用。下面我们将深入探讨 `array_...

    php回调函数处理数组操作示例

    在处理数组时,回调函数能够帮助我们实现更灵活的数据操作,如遍历、过滤和转换。这里我们将深入探讨如何使用PHP回调函数处理数组,通过实例来解析相关操作技巧和注意事项。 1. `array_reduce` 函数: `array_...

    php数组函数序列之array_keys() – 获取数组键名

    `array_keys()` 是 PHP 中一个非常实用的数组函数,...在处理 PHP 数组时,这些函数结合使用可以实现更复杂的数组操作,例如过滤、筛选、查找和排序。了解并熟练运用这些函数,能够极大地提高 PHP 代码的效率和可读性。

    php数组排序

    接下来定义了一个名为`paixu`的函数,该函数实现了冒泡排序的逻辑。 ```php function paixu($str) { $n = count($str); // 获取数组长度 for ($i = 0; $i $n; $i++) { // 外层循环控制排序轮数 for ($j = $n - 2...

    php中使用array_filter()函数过滤空数组的实现代码

    例如,如果你需要基于特定条件筛选数组元素,可以提供一个自定义的回调函数,该函数接受每个元素并返回 `TRUE` 或 `FALSE`,决定是否保留该元素。 总的来说,`array_filter()` 是 PHP 中处理数组数据的有力工具,...

    php多条件组合筛选,搞定多条件组合筛选

    - **解析URL参数**:使用PHP的`parse_str()`函数解析URL中的查询字符串,将其转化为关联数组。 - **匹配SQL条件**:将解析出的参数与数据库字段对应,生成SQL WHERE子句。 - **执行查询**:使用`mysqli_query()`...

    地区数组表

    在IT行业中,尤其是在Web开发领域,我们经常需要处理与数据关联的交互,比如创建...开发者需要理解如何处理PHP数组,如何利用JavaScript进行DOM操作,以及如何使用AJAX进行数据交换,才能有效地实现这样的交互效果。

    php通过数组实现多条件查询实现方法(字符串分割)

    总之,通过数组实现多条件查询是一种常见的PHP编程技巧,它依赖于字符串处理函数如 `str_replace` 和 `explode`。然而,为了确保代码的安全性和性能,需要额外考虑SQL注入防护以及查询优化措施。在处理复杂的查询...

    PHP 二维数组和三维数组的过滤

    通过使用`array_filter()`, `array_map()`, `array_walk()`等内置函数,我们可以轻松地操作多维数组,实现数据处理的各种需求。在实际工作中,根据具体情况灵活运用这些技巧,可以极大地提高代码的可读性和维护性。

    php数组函数序列之array_keys() - 获取数组键名

    4. **键名排序**:获取键名数组后,可以使用`sort()`、`rsort()`等函数对键名进行排序,从而间接实现数组的键排序。 ### 结论 `array_keys()`是PHP处理数组时的重要工具,它可以方便地提取或筛选数组的键名,为...

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

    例如,查找数组中所有大于5的值,可以使用回调函数来实现条件筛选。 至于数组的排序操作,PHP内置了多种排序函数,包括`sort()`、`rsort()`、`asort()`、`arsort()`、`ksort()`、`krsort()`等,它们分别实现不同的...

    php求数组全排列,元素所有组合的方法

    以下是对标题和描述中提到的PHP数组全排列方法的详细解释: 首先,我们需要一个包含多个元素的数组,例如`$source`: ```php $source = array('pll', '我', '爱', '你', '嘿'); ``` 为了确保数组初始有序,可以使用...

    PHP程序设计-3期(KC016) 2.7.2关联数组拓展知识.doc

    在实际开发中,`array_keys()`可以与其他数组函数结合使用,比如`array_filter()`、`array_map()`或`array_reduce()`,实现更复杂的数组操作。例如,我们可以找到值为特定值的键后,再删除这些键对应的元素: ```...

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

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

    php数组函数序列之in_array() 查找数组值是否存在

    ### PHP数组函数序列之in_array() 查找数组值是否存在 #### 概述 `in_array()`函数是PHP中用于在数组内查找特定值的一个非常实用的功能。它可以帮助开发者快速判断一个给定的值是否存在于数组中,从而实现对数据的...

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

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

Global site tag (gtag.js) - Google Analytics