PHP中的array_filter函数如何过滤数组元素?
array_filter函数是PHP中常用的一个函数,它可以过滤数组元素。这个函数接收一个数组参数,同时可以接受一个回调函数或者是匿名函数作为第二个参数,用来定义过滤规则。
语法:
array_filter ( array $array [, callable $callback [, int $flag = 0 ]] ) : array
参数说明:
- $array: 必须。输入的数组。
- $callback: 可选。可以是一个函数名的字符串、一个匿名函数或者是一个数组格式 array($classObj, $methodName)。如果省略了回调函数,将删除数组中所有等价于 FALSE 的元素。
- $flag:可选。指示callback的行为的标志。可以是以下常量之一:
- ARRAY_FILTER_USE_KEY - 如果回调函数中需要使用原数组的键名,可以使用这个常量。
- ARRAY_FILTER_USE_BOTH - 如果回调函数中需要使用原数组的键名和值,可以使用这个常量。
回调函数:
回调函数的参数有一个,表示数组的当前值。该函数应返回 TRUE 或 FALSE。如果返回 TRUE,则该值被包含在返回的数组中,否则该值被删除。
示例:
我们可以通过以下示例来了解array_filter函数的使用:
// 过滤数组中的偶数,使用自定义函数
function even($var){
return($var & 1);
}
$arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
$result = array_filter($arr1, "even");
print_r($result);
结果:Array ( [0] => 1 [2] => 3 [4] => 5 [6] => 7 [8] => 9 )
// 过滤数组中的偶数,使用匿名函数
$arr2 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
$result = array_filter($arr2, function ($value) {
return $value % 2;
});
print_r($result);
结果:Array ( [0] => 1 [2] => 3 [4] => 5 [6] => 7 [8] => 9 )
上面示例分别使用了自定义函数和匿名函数过滤数组中的偶数,结果都是过滤掉了偶数。
除了使用回调函数,我们还可以使用ARRAY_FILTER_USE_KEY常量来根据键名过滤数组元素,示例如下:
// 过滤单词长度小于5的元素
$arr3 = ["apple", "banana", "pear", "orange"];
$result = array_filter($arr3, function ($key) {
return strlen($key)>5;
}, ARRAY_FILTER_USE_KEY);
print_r($result);
结果:Array ( [1] => banana [3] => orange )
上面的示例使用了长度判断过滤掉了单词长度小于5的元素。
最后,ARRAY_FILTER_USE_BOTH常量还可以在回调函数中同时使用键和值来过滤数组元素,示例如下:
// 过滤单词长度小于5且值是水果的元素
$arr4 = ["apple", "banana", "pear", "orange"];
$result = array_filter($arr4, function ($value, $key) {
return strlen($key)>5 && strpos($value, 'fruit') !== false;
}, ARRAY_FILTER_USE_BOTH);
print_r($result);
结果:Array ( [1] => banana )
上面示例中使用了键和值作为条件过滤数组元素,最终只输出了值包含“fruit”字符串且键名长度大于5的元素。
