php中array_filter的使用

这是今天在做作业的时候遇到的一个问题,不知道大家有没有遇到同样的问题,就是去除数组中不符合我们条件的数据并且保留其键名。

言归正传:

  array array_filter ( array $input [, callback $callback ] )

  array_filter() 依次将 input 数组中的每个值传递到 callback 函数。如果 callback 函数返回 TRUE,则 input数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。

具体的使用方法我也研究了一下。在一般情况下使用

  function old($var)

{

  return($var % 2 == 1);
}

 $array1 = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);

 print_r(array_filter($array1, "old"));
这样我们打印出来就是

  Array( [a] => 1[c] => 3  [e] => 5);

这里需要说明的是,$var 代表传入的值参数,然后根据函数的运算,返回为真的则进行保留,返回为假的进行去除。

手册上也就这么多的说明,但是怎么在oop中使用呢?想了半天也实验了半天,搞定了。

  在oop中

  function old($var)

{

  return($var % 2 == 1);

}

$array1 = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
print_r(array_filter($array1, array($this,‘old‘)));
说完用法,我们来回顾下 array_filter的含义,它是将数组的值依次传入其中进行运算的,也就相当于foreach一遍,测试了下在1185条数据处理使用了 0.25s。

若果数据比较多的时候 时间还会更长。下面看下另外的一个方法

  foreach($array as $key => $value){

    if(true){

      continue;

    }

    -------------------------

}

两个函数处理的时间是一样的,但是要注意的一点就是

arry_filte是一次运算,不可以参杂更多的运算逻辑。

而foreach则可以在运算的同时进行其它的操作运算。

综上所述,在数据量较小或不需要太多的运算的时候完全可以使用array_filter,并且效率是很高的。

若数据量比较庞大,或运算比较复杂则使用下面一种比较快些。。

时间: 2024-10-11 04:51:09

php中array_filter的使用的相关文章

array_filter、find_in_set查询id是否在id集合中、concat连接字符串,ifnull、if用法

1:array_filter检查每个元素是不是数字 if(array_filter($this->data['log_id'] ,'is_numeric') !== $data['log_id']) echo '000'; 2:concat连接字符串,ifnull.if用法update logset users = concat(ifnull(users,''),if(users,',411','411'))where log_id between 453729 and 453740; 3:fi

php中array_map,array_filter,array_walk区别

在php中array_map,array_filter,array_walk三个函数都是对数据操作的,下面我来介绍这三个函数的用法与区别. array_walk: array_walk()返回布尔值,如果回调函数需要直接作用于数组中的值,则给回调函数的第一个参数指定为引用.这样任何对这些单元的改变也将会改变原始数组本身.此函数可以同时获取到数组的key和value. array_map: array_map() 返回一个数组,该数组包含了 arr1 中的所有单元经过 callback 作用过之后

php中利用array_filter过滤数组为空值

[导读] 在我们开发过程中,判断数组为空时你会想到什么方法呢?首先想到的应该是empty函数,不过直接用empty函数判断为空是不对的,因为当这个值是多维数的时候,empty结果是有值的.其实我们可以利用array_filter函数 在我们开发过程中,判断数组为空时你会想到什么方法呢?首先想到的应该是empty函数,不过直接用empty函数判断为空是不对的,因为当这个值是多维数的时候,empty结果是有值的. 其实我们可以利用array_filter函数轻松去掉多维空值,而数组的下标没有改变,下

巧用php中的array_filter()函数去掉多维空值的代码分享

在我们开发过程中,判断数组为空时你会想到什么方法呢?首先想到的应该是empty函数,不过直接用empty函数判断为空是不对的,因为当这个值是多维数的时候,empty结果是有值的 其实我们可以利用array_filter函数轻松去掉多维空值,而数组的下标没有改变,下面是举例用法: <?php $array = array( 0 => 'nicegy', 1 => false, 2 => 1, 3 => null, 4 => '', 5 => 'http://www.

PHP – 在类中使用array_filter时回调函数的问题

了一个类处理好友,其中有一个方法用来同步好友,而这个方法中需要从微博传来的关注列表和粉丝列表中,找到互相关注的用户,记录一下经验,主要还是关于回调函数. 按照我最初的理解,这样写就可以了 private function getMutualFromSina ($focusList) { return array_filter($focusList, "filterSinaList"); } private function filterSinaList ($value) { retur

巧用php中的array_filter()函数去掉多维空值

一直一维array_filter() 函数只能去除一维数组,其实这个函数也能去除多维数组: $arr =[ '0'=>array(), '1'=>'false', '2'=>'test', '3'=>'' ]; var_dump($arr); var_dump(array_filter($arr)); 最后发现所有的空值,包括array()空数组也没了,这个函数确实去除了所有的空值

array_filter可以去除数组中value为空的键值

function old($var) { return($var % 2 == 1); } $array1 = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5); print_r(array_filter($array1, "old")); 这样我们打印出来就是 Array( [a] => 1[c] =>

回调同一个类中的函数

写了一个类处理好友,其中有一个方法用来同步好友,而这个方法中需要从微博传来的关注列表和粉丝列表中,找到互相关注的用户,记录一下经验,主要还是关于回调函数. 按照我最初的理解,这样写就可以了 private function getMutualFromSina ($focusList) { return array_filter($focusList, "filterSinaList"); } private function filterSinaList ($value) { retu

项目开发中常用的PHP函数

日期操作 为了便于存储.比较和传递,我们通常需要使用strtotime()函数将日期转换成UNIX时间戳,只有在显示给用户看的时候才使用date()函数将日期转换成常用的时间格式. strtotime()  函数将任何英文文本的日期时间描述解析为 Unix 时间戳 eg: <?php echo(strtotime("now")); echo(strtotime("3 October 2005")); echo(strtotime("+5 hours&