欢迎访问宙启技术站
智能推送

PHP中的array_filter函数如何过滤数组元素?

发布时间:2023-06-05 06:25:19

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的元素。