php过滤函数array_filter()函数演示案例

PHP / 595人浏览 / 0人评论

定义和用法 array_filter() 函数用回调函数过滤数组中的元素。该函数把输入数组中的每个键值传给回调函数。如果回调函数返回 true,则把输入数组中的当前键值返回给结果数组。数组键名保持不变。

php过滤函数array_filter()

定义和用法

array_filter() 

函数用回调函数过滤数组中的元素。

该函数把输入数组中的每个键值传给回调函数。

如果回调函数返回 true,则把输入数组中的当前键值返回给结果数组。

数组键名保持不变。

语法

array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )

参数解释:

参数描述
array必需。规定要过滤的数组。
callback可选。规定要用的回调函数。
flag可选。决定 callback 接收的参数形式:ARRAY_FILTER_USE_KEY - callback 接受键名作为的唯一参数 ARRAY_FILTER_USE_BOTH - callback 同时接受键名和键值

演示案例

<?php
    
    class Test {
        
        public function odd($var)
        {
            // 返回输入整数是否为奇数(单数)
            if (is_numeric($var)) {
                return $var & 1;
            }        
        }

        public function even($var)
        {
            // 返回输入整数是否为偶数
            if (is_numeric($var)) {
                return !($var & 1);
            }

        }

        public function index()
        {
            // 数组一
            $array_one = ['a' => 0, 'b' => null, 'c' => '', 'd' => 101, 'e' => 202, 'f'=> 303, 'g'=> 304, 'h'=>true, 'i'=>false];
            
            // 数组二
            $array_two = [0, '', null, 101, 202, 303, 404, 505, 606, true];
            
            // 数组三
            $array_three = [0 => 0, "" => null, 2 => '', 'null' => 101, 4 => 202, 5 => 303, 6 => 304, 7=>true];

            // 不用回调函数过滤数组中的元素(会过滤掉空值、0、null)
            
            echo "直接过滤数组中的元素(会过滤掉空值、0、'0'、'' 、null、false),无回调函数 :\n";

            var_dump(array_filter($array_one));

            // 返回结果

            // array(5) {
            //     ["d"]=>
            //     int(101)
            //     ["e"]=>
            //     int(202)
            //     ["f"]=>
            //     int(303)
            //     ["g"]=>
            //     int(304)
            //     ["h"]=>
            //     bool(true)
            // }

            // 用回调函数过滤数组中的元素:
            echo "取数组中 奇数值,\$this 表示当前类中寻找 odd函数, Odd :\n";
            
            var_dump(array_filter($array_one, array($this, "odd")));
            
            // 返回结果
            // array(2) {
            //     ["d"]=>
            //     int(101)
            //     ["f"]=>
            //     int(303)
            // }
            
            echo "取数组中 偶数值,\$this 表示当前类中寻找 even函数, Even:\n";

            var_dump(array_filter($array_two, array($this, "even")));
            
            // 返回结果
            // array(4) {
            //     [0]=>
            //     int(0)
            //     [4]=>
            //     int(202)
            //     [6]=>
            //     int(404)
            //     [8]=>
            //     int(606)
            // }

            // 用回调函数过滤数组中的元素:
            echo "针对健 的数据过滤,第三个参数:ARRAY_FILTER_USE_KEY(将键名作为 callback 回调的唯一参数,而不是值) :\n";        
            var_dump(array_filter($array_three, function($key) {

                if($key === '' || $key === null || $key === 'null' || !is_numeric($key)){
                    return false;
                }
                
                return true;
                
            }, ARRAY_FILTER_USE_KEY));

            // 返回结果
            // array(6) {
            //     [0]=>
            //     int(0)
            //     [2]=>
            //     string(0) ""
            //     [4]=>
            //     int(202)
            //     [5]=>
            //     int(303)
            //     [6]=>
            //     int(304)
            //     [7]=>
            //     bool(true)
            // }        

            // 用回调函数过滤数组中的元素:
            echo "针对健值 的数据过滤 第三个参数:ARRAY_FILTER_USE_BOTH(将值和键都作为参数传递给 callback 回调,而不是仅传递值):\n";
            var_dump(array_filter($array_three, function($value, $key) {

                if($value === '' || $value === null || !is_numeric($value) || $key === '' || $key === null || !is_numeric($key) || $key === 0){
                    return false;
                }
                
                return true;
                
            }, ARRAY_FILTER_USE_BOTH));

            // array(3) {
            //     [4]=>
            //     int(202)
            //     [5]=>
            //     int(303)
            //     [6]=>
            //     int(304)
            // }
        }
    }
?>

转载注明:

0 条评论

还没有人发表评论

发表评论 取消回复

记住我的信息,方便下次评论
有人回复时邮件通知我