0

我正在尝试验证是否filter_var_array过滤了某些输入。如果过滤器失败或未设置变量,则
根据 PHP 文档filter_var_array返回。falsenull

我创建了一个小测试来检查如何在数组中搜索 (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类型严格

4

1 回答 1

0

难道我做错了什么?

是的:

  1. 通过将 null 和 false 传递给 strtolower,您将它们视为字符串。这不是一个好主意。

  2. 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);

  3. 您关于 in_array 的返回值的陈述不正确。in_array "如果在数组中找到针,则返回 TRUE,否则返回 FALSE。"

于 2015-09-18T07:41:44.887 回答