首页 > 解决方案 > 使用带有标志和回调的 filter_input_array 时语法正确吗?

问题描述

我有一个表单,它以名称提交一个数组('foo' 是动态的并且不重复),就像这样 name="formLink['foo']

我使用 filter_input_array 过滤并使用自定义回调来检查数组值的长度。问题是标志 ARRAY_FILTER_USE_KEY 和 ARRAY_FILTER_USE_BOTH 不做任何事情。

$filters = array(
    "formLink" => array("filter" => FILTER_CALLBACK,
    "flags" => FILTER_FORCE_ARRAY | ARRAY_FILTER_USE_KEY,
    "options" => "Validation::validLength"
)
$arr = filter_input_array(INPUT_POST, $filters);

public static function validLength($str) {
    if (strlen($str) > 30) {
        return false;
    }
    return true;
}

$arr值为

array(1) (
    [formLink] => array(1) (
    [foo] => (bool) true
)

我不确定为什么当我认为如果您返回 true 它只是保留该值而返回 false 时删除该值时,数组值被更改为布尔值。

我尝试删除其他过滤器并重新排列标志的位置,但无济于事。我还尝试了一个带有 2 个参数的函数来处理 ARRAY_FILTER_USE_BOTH 需要 2 个参数,但它从不发送两个参数。

根据https://www.php.net/manual/en/filter.filters.misc.php,使用 FILTER_CALLBACK 时所有标志都将被忽略,我觉得这很奇怪,因为标志与 array_filter 回调-array_filter ($array, call_back_function() ,$标志); 我想这就是为什么标志不起作用的答案。所以剩下的问题是为什么回调会改变数组值?

*编辑:我看到我可以返回相同的字符串,但我认为它应该像我提到的那样工作,并且仍在尝试发送数组键和值。

*编辑:此示例使用带有 FILTER_CALLBACK 的 FILTER_FORCE_ARRAY 标志,https: //www.w3schools.com/php/func_filter_input_array.asp

标签: php

解决方案


推荐阅读