PHP函数-array_filter过滤数组中的元素

php 2023-05-27 1386次浏览

前言

最近优化项目的时候,整理到了请求参数的处理类,针对有效参数的接收和过滤,正好用到的array_filter作为数组元素校验和过滤,简单记录下

array_filter($array, $callback = null, $mode = 0)

使用回调函数过滤数组的元素。遍历 array 数组中的每个值,并将每个值传递给 callback 回调函数。 如果 callback 回调函数返回 true,则将 array 数组中的当前值返回到结果 array 数组中。

$callback: 回调函数,不设置的话,过滤数组内所有空元素。如何判定“空”元素,请参照empty()
$mode: 决定哪些参数发送到 callback 回调。默认0,传值给回调函数

  • ARRAY_FILTER_USE_KEY - 将键名作为 callback 回调的唯一参数
  • ARRAY_FILTER_USE_BOTH - 将值和键都作为参数传递给 callback 回调

示例

$arr = ['', "", null, [], FALSE, NULL, '0', 0, "robin", 3];

//默认过滤
var_dump(array_filter($arr));
/**
array(2) {
     [8]=>string(5) "robin"
     [9]=>int(3)
}
*/

//回调函数传值过滤
function callback_val($val) {
    if(is_null($val) || $val === 0) {
        return false;
    }

    return true;
}
var_dump(array_filter($arr, "callback_val"));
/**
array(7) {
     [0]=>string(0) ""
     [1]=>string(0) ""
     [3]=>array(0) {}
     [4]=>bool(false)
     [6]=>string(1) "0"
     [8]=>string(5) "robin"
     [9]=>int(3)
}
*/

//回调函数传键过滤
function callback_use_key($key) {
    if($key <= 5) {
        return false;
    }

    return true;
}
var_dump(array_filter($arr, "callback_use_key", ARRAY_FILTER_USE_KEY));
/**
array(4) {
     [6]=>string(1) "0"
     [7]=>int(0)
     [8]=>string(5) "robin"
     [9]=>int(3)
}
*/

//回调函数传键&值过滤
function callback_use_both($val, $key) {
    if($key <= 5 || $val == 3) {
        return false;
    }

    return true;
}
var_dump(array_filter($arr, "callback_use_both", ARRAY_FILTER_USE_BOTH));
/**
array(3) {
     [6]=>string(1) "0"
     [7]=>int(0)
     [8]=>string(5) "robin"
}
*/

静态类/实例化场景

上面主要示例了一些函数直接调用的方法,实际项目场景中,基本是以静态类、静态方法或实例化的调用方式

<?php

class Request {

    private static $_arr = ['', "", null, [], FALSE, NULL, '0', 0, "robin", 3];

    /**
     * 回调函数接收:键&值
     */
    private static function callback_val_key($val, $key) {
        if($key <= 5 || $val == 3) {
            return false;
        }

        return true;
    }

    /**
     * 键&值过滤
     */
    public static function filter_use_both() {
        return array_filter(self::$_arr, [self, "callback_val_key"], ARRAY_FILTER_USE_BOTH);
    }

    /**
     * 回调函数接收:值
     */
    public static function callback_check($val) {
        if(is_null($val) || $val === 0) {
            return false;
        }

        return true;
    }

    /**
     * 默认传值过滤
     */
    public static function filter() {
        return array_filter(self::$_arr, [self, "callback_check"]);
    }

}

var_dump(Request::filter());
/**
array(7) {
     [0]=> string(0) ""
     [1]=>string(0) ""
     [3]=>array(0) {}
     [4]=>bool(false)
     [6]=>string(1) "0"
     [8]=>string(5) "robin"
     [9]=>int(3)
}
*/

var_dump(Request::filter_use_both());
/**
array(3) {
     [6]=>string(1) "0"
     [7]=>int(0)
     [8]=>string(5) "robin"
}
*/

如果是实例化类调用的话,将self替换为$this就可以。
PHP函数-array_filter过滤数组中的元素

喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(2)个小伙伴在吐槽
  1. Nice blog here! Also your web site loads up fast! What web host are you using? Can I get your affiliate link to your host? I wish my site loaded up as fast as yours lol
    James R. Johnson2023-05-28 17:01 回复 Windows 10 | Chrome 103.0.0.0
    • 网站使用阿里云主机,很抱歉,暂时没有开放会员体系,无法提供使用。感谢来访,祝您生活愉快!
      ngxcode2023-05-30 23:26 回复 Mac OS X | Chrome 101.0.0.0