使用 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)的主要内容,如果未能解决你的问题,请参考以下文章