php - 使用带有标志和回调的 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
解决方案
推荐阅读
- xcode - 预处理器 ifdef 不会隐藏 Objective C 框架中的代码块
- javascript - 带有ajax请求的laravel下载文件
- javascript - 天:小时:分钟:秒的 Moment.js 格式
- github - 如何使用部署密钥在多台服务器上自动克隆同一个存储库?
- presto - presto 生产集群 + 集群中最少的 presto 工作机器
- shieldui - 如何在不使用刷新功能的情况下以动态方式设置网格列标题
- charles-proxy - 查尔斯不工作,弹出“允许”或“拒绝”不来
- javascript - 如何从 Sat Datepicker 获取开始和结束日期值
- google-apps-script - 如何在 Google Script 中转义“/”字符
- php - MPDF 在 codeigniter 中不起作用(PHP 7.2 版)