gpt4 book ai didi

复杂数组的PHP输入过滤

转载 作者:可可西里 更新时间:2023-11-01 12:50:12 27 4
gpt4 key购买 nike

官方 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', '10', '12'))
);

最佳答案

想法一

考虑使用 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));

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

关于复杂数组的PHP输入过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4995526/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com