Code前端首页关于Code前端联系我们

PHP array_filter函数详解

terry 2年前 (2023-09-29) 阅读数 57 #PHP
文章标签 PHP

1. 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。

2。 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”。该字符串和后面的参数列表必须与过滤函数名称和输入参数列表一致。

3。使用匿名函数过滤数组

上面的示例程序使用了一个命名函数来完成过滤操作。其实在PHP中我们也可以使用匿名函数(闭包)来定义过滤函数,如下所示:

$arr1 = array(1,2,3,4,5);
//使用匿名函数过滤数组中大于等于3的元素
$arr2 = array_filter($arr1, function($num){
    return ($num >= 3);
});
print_r($arr2);

在这个示例程序中,我们使用匿名函数作为过滤函数来判断数组中的元素是否大于等于3。显然,使用匿名函数的代码更加简洁,更容易理解,并且更具可读性。

4。过滤数组键和值

默认情况下,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 来指定对数组键或值的过滤。

5。 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 函数与其他数组函数结合使用来执行复杂的数组处理操作。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门