用in_array搜索(null,false)

时间:2015-09-18 07:22:26

标签: php arrays array-intersect

我正在尝试验证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是严格类型

1 个答案:

答案 0 :(得分: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。"