加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

复杂数组的PHP输入过滤

发布时间:2020-12-13 18:04:42 所属栏目:PHP教程 来源:网络整理
导读:官方 PHP文档指出filter_var_array()支持以下格式的数组过滤: $data = array( 'testarray' = array('2','23','10','12'));$args = array( 'testarray' = array('filter' = FILTER_VALIDATE_INT,'flags' = FILTER_FORCE_ARRAY ) );$myinputs = filter_var_ar
官方 PHP文档指出filter_var_array()支持以下格式的数组过滤:
$data = array(
    'testarray'    => array('2','23','10','12')
);

$args = array(
    'testarray'    => array('filter'    => FILTER_VALIDATE_INT,'flags'     => FILTER_FORCE_ARRAY
                           )    
);

$myinputs = filter_var_array($data,$args);

但是,如果所讨论的数组是多维的并且需要针对不同部分使用不同的过滤器,那么您将如何定义过滤选项呢?

举个例子:

$data = array(
    'testhash'    => array('level1'=>'email','level2'=> array('23','12'))
);
想法1

考虑使用FILTER_CALLBACK.通过这种方式,您可以编写一个本身使用过滤器扩展的回调函数,从而提供递归功能.

function validate_array($args) {
    return function ($data) use ($args) {
        return filter_input_array($data,$args);
    };
}

这将生成回调函数.

$args = array(
    'user' => array(
        'filter' => FILTER_CALLBACK,'options' => validate_array(array(
            'age' => array('filter' => FILTER_INPUT_INT),'email' => array('filter' => FILTER_INPUT_EMAIL)
        ))
    )
);

这就是配置数组的样子.

想法2

不要犹豫要拍我的背,因为我为此感到自豪.

拿一个看起来像这样的arg数组.斜线表示深度.

$args = array(
    'user/age' => array('filter' => FILTER_INPUT_INT),'user/email' => array('filter' => FILTER_INPUT_EMAIL),'user/parent/age' => array('filter' => FILTER_INPUT_INT),'foo' => array('filter' => FILTER_INPUT_INT)
);

假设您的数据看起来像这样.

$data = array(
    'user' => array(
        'age' => 15,'email' => 'foo@gmail.com','parent' => array(
            'age' => 38
        )
    ),'foo' => 5
);

然后,您可以生成一个引用数组,将“user / age”等键映射到$data [‘user’] [‘age’].在最终的制作中,你得到这样的东西:

function my_filter_array($data,$args) {
    $ref_map = array();
    foreach ($args as $key => $a) {
        $parts = explode('/',$key);
        $ref =& $data;
        foreach ($parts as $p) $ref =& $ref[$p];
        $ref_map[$key] =& $ref;
    }
    return filter_var_array($ref_map,$args);
}

var_dump(my_filter_array($data,$args));

现在唯一的问题是如何处理验证记录与原始数据集之间的不匹配.如果不知道如何使用它们,我无法回答.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读