一、array_filter函数概述
array_filter函数是PHP中的内置函数,可以用来过滤数组中的元素,返回一个过滤后的新数组。这个函数非常实用,可以用来过滤任何类型的数组,比如数字、字符串、对象等。
array_filter函数的基本语法如下:
array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )
其中,$array表示要进行过滤的数组,$callback是一个可选参数,用来指定过滤函数。如果不传入$callback参数,则过滤掉数组中等价于FALSE的元素。$flag参数也是可选的,用来指定对数组进行何种操作。默认情况下,$flag的值为0,表示对数组的键进行过滤,若要对值进行过滤,则需将$flag的值设为1。
二、array_filter函数的常规使用
array_filter函数最基本的使用情况是对数组中的元素进行过滤。下面是一个示例程序:
$arr1 = array(1,2,3,4,5);
//过滤掉数组中的奇数
function isEven($num){
return ($num%2 == 0);
}
$arr2 = array_filter($arr1, "isEven");
print_r($arr2);
上述程序中定义了一个数组$arr1,然后定义了一个isEven函数用来判断数组中的元素是否为偶数,最后使用array_filter函数过滤掉所有的奇数,得到新的数组$arr2。在程序输出新数组时,我们得到了一个只包含偶数的新数组。在这个示例中,$callback被赋值为"isEven",这个字符串以及后面的参数表必须和过滤函数的名称与输入参数表一致。
三、使用匿名函数过滤数组
上述示例程序使用了一个命名函数来完成过滤操作。实际上,我们还可以使用PHP中的匿名函数(闭包)来定义过滤函数,如下所示:
$arr1 = array(1,2,3,4,5);
//使用匿名函数过滤数组中大于等于3的元素
$arr2 = array_filter($arr1, function($num){
return ($num >= 3);
});
print_r($arr2);
在这个示例程序中,我们使用一个匿名函数来作为过滤函数,判断数组中的元素是否大于等于3。可以看到,使用匿名函数的代码更加简洁易懂,可读性更高。
四、对数组键和值进行过滤
在默认情况下,array_filter函数会对数组的键进行过滤。我们可以通过调整$flag参数的值,来对数组的值进行过滤。如果需要同时对键和值进行过滤,则需要使用PHP中的数组过滤函数array_walk。
下面是一个对数组键和值进行过滤的示例程序:
$arr1 = array(
"name" => "Tom",
"age" => 24,
"gender" => "male",
"id" => 123456
);
//只保留键为"name"和"gender"的元素
$arr2 = array_filter($arr1, function($key){
return ($key == "name" || $key == "gender");
}, ARRAY_FILTER_USE_KEY);
//只保留值为字符串类型的元素
$arr3 = array_filter($arr1, function($val){
return is_string($val);
}, ARRAY_FILTER_USE_VALUE);
print_r($arr2);
print_r($arr3);
在上述示例程序中,我们使用了PHP中的常量ARRAY_FILTER_USE_KEY和ARRAY_FILTER_USE_VALUE来指定对数组键或值进行过滤。
五、array_filter函数的高级应用
array_filter函数同时支持多个数组参数作为输入,可以结合使用数组合并函数array_merge和数组映射函数array_map,实现更加复杂的过滤操作。下面是一个示例程序:
$arr1 = array(1,2,3,4,5);
$arr2 = array(2,4,6,8,10);
$arr3 = array(-1,-2,0,1,2,5);
//过滤掉数组$arr1、$arr2、$arr3中小于等于2的数列,最后合并数组
$newArr = array_merge(
array_filter($arr1, function($num){ return ($num > 2); }),
array_filter($arr2, function($num){ return ($num > 2); }),
array_filter($arr3, function($num){ return ($num > 2); })
);
print_r($newArr);
在这个示例中,我们定义了三个数组$arr1、$arr2和$arr3,然后对这三个数组分别进行过滤,把过滤后的数组合并成为一个新数组。这个程序演示了如何使用array_filter函数结合其他数组函数进行复杂的数组处理操作。