这是今天在做作业的时候遇到的一个问题,不知道大家有没有遇到同样的问题,就是去除数组中不符合我们条件的数据并且保留其键名。
言归正传:
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,并且效率是很高的。
若数据量比较庞大,或运算比较复杂则使用下面一种比较快些。。