我正在尝试验证filter_var_array
是否过滤了一些输入
根据PHP文档filter_var_array
如果过滤器失败则返回false
;如果未设置变量,则返回null
。
我创建了一个小测试来检查如何搜索(null,false)
在数组内部,我得到了一些奇怪的结果
$tmp = $tmp = array(null, 1, 'test', 100, false);
$arr = array(null, false);
$x = in_array(array_map('strtolower',$arr), array_map('strtolower', $tmp), true);
var_dump($x);
$x = in_array(array_map('strtolower', $tmp), array_map('strtolower',$arr), true);
var_dump($x);
输出:
boolean false
boolean false
我做错了吗?
修改: 答案在@sg的评论中给出。
执行此操作的方法是使用array_intersect
。
$tmp = array(null, 1, 0, FALSE, 'test', NULL, 100, false);
$arr = array(null, false);
$x = array_intersect($tmp, $arr);
var_dump($x);
输出:
array (size=4)
0 => null
3 => boolean false
5 => null
7 => boolean false
重要说明:
1.如果$ needle是阵列。 in_array
搜索全数组匹配
2. array_intersect
是严格类型
答案 0 :(得分:0)
我做错了吗?
是:
您将null和false视为字符串,方法是将它们传递给strtolower。这不是一个好主意。
in_array并不像那样工作。此时你要求它在第一个数组中找到一个包含null和false的数组。它不会遍历针中每个单独搜索每个值的值。试试看:
$tmp = array(array(null, false), 1, 'test', 100, false);
$arr = array(null, false);
$x = in_array($arr, $tmp, true);
var_dump($x);
$x = in_array($tmp, $arr, true);
var_dump($x);
您关于in_array返回值的陈述不正确。 in_array"如果在数组中找到了针,则返回TRUE,否则返回FALSE。"