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

深入解析PHP的array_filter函数

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

1. array_filter的基本用法

array_filter函数是PHP中常用的数组处理函数之一,用于过滤数组元素。使用 array_filter 函数时,必须传递一个数组作为函数的第一个参数,然后可以传递一个回调函数来指定过滤条件。

    $arr = array(1, 2, 3, '', NULL, 0, 'hello', false);
    function callback($val)
    {
        return $val !== '' && $val !== NULL && $val !== false && $val !== 0;
    }
    $result = array_filter($arr, 'callback');
    print_r($result);

在上面的代码中,我们使用回调函数来过滤数组,只留下非空和非0元素,并将结果存储在$result数组中。执行上述代码时,输​​出为:

    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
        [6] => hello
    )

如您所见,array_filter 函数留下非空和非 0 元素。

2。 array_filter的高级使用

除了使用回调函数之外,array_filter函数还有一些高级用途,可以让我们更方便地处理数组。

1。使用匿名函数作为回调函数

通过使用匿名函数,我们可以避免为每个过滤条件定义一个函数。

    $arr = array(1, 2, 3, '', NULL, 0, 'hello', false);
    $result = array_filter($arr, function($val){
        return $val !== '' && $val !== NULL && $val !== false && $val !== 0;
    });
    print_r($result);

使用匿名函数过滤数组,结果与上例相同。

2。使用按位运算过滤字段的元素

array_filter函数还可以使用按位运算符来过滤数组元素。

    $arr = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
    $result = array_filter($arr, function($key){
        return (bool)($key & 1);
    }, ARRAY_FILTER_USE_KEY);
    print_r($result);

在上面的代码中,我们使用了数组常量ARRAY_FILTER_USE_KEY。这个常量意味着我们使用按位运算符来过滤数组元素。使用 (1&$key) 意味着过滤数组中具有奇数索引的元素。

执行上面的代码,输出为:

    Array
    (
        [0] => 1
        [2] => 3
        [4] => 5
        [6] => 7
        [8] => 9
    )

3。 array_filter函数的实际使用示例

array_filter函数常用于处理数组。以下是一些实际用例。

1。删除数组中的 null 或空字符串

    $arr = array(1, 2, '', 3, null, 'hello', '');
    $arr = array_filter($arr);
    print_r($arr);

执行上面的代码,输出为:

    Array
    (
        [0] => 1
        [1] => 2
        [3] => 3
        [5] => hello
    )

2。执行类似于 SQL 的 WHERE 子句

我们可以结合回调函数来实现类似SQL的WHERE子句。

    $users = array(
        array('name' => '张三', 'age' => 25, 'gender' => '男'),
        array('name' => '李四', 'age' => 30, 'gender' => '男'),
        array('name' => '王五', 'age' => 20, 'gender' => '女'),
        array('name' => '赵六', 'age' => 43, 'gender' => '男'),
        array('name' => '小七', 'age' => 18, 'gender' => '女'),
    );
    $filters = array(
        'age' => array('>=' => 30),
        'gender' => '男'
    );
    function where($item, $filters){
        foreach ($filters as $key => $value) {
            if (is_array($value)) {
                switch (key($value)) {
                    case '>=':
                        if ($item[$key] 

版权声明

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

热门