使用 in_array 搜索 (null, false)

Posted

技术标签:

【中文标题】使用 in_array 搜索 (null, false)【英文标题】:search with in_array for (null, false) 【发布时间】:2015-09-18 07:22:26 【问题描述】:

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

【问题讨论】:

你的预期输出是什么 ...在这种特殊情况下:为什么? ;-) @Uchiha 如果在数组中找到 needle 则为 TRUE,否则为 FALSE @VolkerK 试图验证 filter_var_array 是否过滤了某些输入。你能推荐一个更好的方法吗? 不不,我的意思是为什么你会得到不同的结果。例如。 array_map(strtolower, [null,false]) 应该做什么?你认为 $needle in_array($needle, $haystack) 中的结果是什么? 【参考方案1】:

我做错了吗?

是的:

    通过将 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 "如果在数组中找到 needle,则返回 TRUE,否则返回 FALSE。"

【讨论】:

1.你说的对。但即使没有 strtolower,它也不起作用。 2.我不是在寻找一个完整的 (null, false) 数组,我在寻找其中一个针元素。 3.看问题和cmets。我准确地说明了每个函数返回的返回值 Re: 2. 您的示例确实搜索了一个完整的数组。您可以使用 array_intersect 来做到这一点。这可能会达到你想要的。 感谢@sg array_intersect 正确地完成了这项工作。重要的是要声明 array_intersect 是严格类型的

以上是关于使用 in_array 搜索 (null, false)的主要内容,如果未能解决你的问题,请参考以下文章

in_array 和 isset的效率

in_array 和 isset的效率

转 PHP in_array() 函数

函数 in_array()

如果 needle 为 0,in_array 返回 true [重复]

php中in_array函数的坑