欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

PHP array_filter() 函数

shiping1 的头像

PHP Array 函数

实例

用回调函数过滤数组中的元素:

<?php
function test_odd($var)
{
return($var & 1);
}

$a1=array("a","b",2,3,4);
print_r(array_filter($a1,"test_odd"));
?>

运行实例

定义和用法

array_filter() 函数用回调函数过滤数组中的值。

该函数把输入数组中的每个键值传给回调函数。如果回调函数返回 true,则把输入数组中的当前键值返回结果数组中。数组键名保持不变。

语法

array_filter(array,callbackfunction);
参数描述
array必需。规定要过滤的数组。
callbackfunction必需 (可选)。规定要使用的回调函数。

技术细节

返回值:返回过滤的数组。
PHP 版本:4.0.6+


来自 http://www.w3school.com.cn/php/func_array_filter.asp

array_filter

(PHP 4 >= 4.0.6, PHP 5, PHP 7)

array_filter — 用回调函数过滤数组中的单元

说明 ¶

array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )

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

参数 ¶

  • array

  • 要循环的数组

  • callback

  • 使用的回调函数

    如果没有提供 callback 函数, 将删除 input 中所有等值为 FALSE 的条目。更多信息见转换为布尔值

  • flag

  • 决定callback接收的参数形式:

    • ARRAY_FILTER_USE_KEY - callback接受键名作为的唯一参数

    • ARRAY_FILTER_USE_BOTH - callback同时接受键名和键值

返回值 ¶

返回过滤后的数组。

范例 ¶

Example #1 array_filter() 例子

<?php
function odd($var)
{
    
// returns whether the input integer is odd
    
return($var 1);
}

function 
even($var)
{
    
// returns whether the input integer is even
    
return(!($var 1));
}


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

echo 
"Odd :\n";
print_r(array_filter($array1"odd"));
echo 
"Even:\n";
print_r(array_filter($array2"even"));
?>

以上例程会输出:

Odd :
Array
(
    [a] => 1
    [c] => 3
    [e] => 5
)
Even:
Array
(
    [0] => 6
    [2] => 8
    [4] => 10
    [6] => 12
)

Example #2 array_filter() 无 callback

<?php

$entry 
= array(
             
=> 'foo',
             
=> false,
             
=> -1,
             
=> null,
             
=> ''
          
);

print_r(array_filter($entry));
?>

以上例程会输出:

Array
(
    [0] => foo
    [2] => -1
)

注释 ¶

Caution

用户不应在回调函数中修改数组本身。例如增加/删除单元或者对 array_filter() 正在作用的数组进行 unset。如果数组改变了,此函数的行为将不可预测。

参见 ¶

  • array_map() - 将回调函数作用到给定数组的单元上

  • array_reduce() - 用回调函数迭代地将数组简化为单一的值

  • array_walk() - 使用用户自定义函数对数组中的每个元素做回调处理

来自 http://php.net/manual/zh/function.array-filter.php

php中array_filter的使用

 

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

言归正传:

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

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

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

  function old($var)

{

  return($var == 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 == 1);

}

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

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

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

    if(true){

      continue;

    }

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

}

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

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

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

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

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

来自 http://www.cnblogs.com/upmyself/archive/2012/11/22/2783388.html

普通分类: