使用数组作为搜索值的php in_array()函数产生意外结果

5
我有一个简单的in_array()函数使用数组作为搜索条件,以下是示例,但我期望我的示例应该输出;

在数组中找到匹配项

假设干草堆中都存在搜索条件。然而,这段代码并没有产生任何输出。我希望有人能帮助我理解为什么我在这里没有得到匹配。
<?php
$needle =  array('fjord', 'troz');
$haystack =  array('troz', 'zort', 'fran', 'fjord');
if (in_array($needle, $haystack))
{
echo "match found in the array";
}

?>

我已经阅读了http://php.net/manual/zh/function.in-array.php,但我不确定为什么没有匹配成功。


1
因为 needle 是一个数组,所以 in_array() 函数会查找一个数组。 - Jay Blanchard
1
当针是一个数组时,您将在这个干草堆中找到匹配项:array(array('foo', 'bar'), array('fjord', 'troz')); 这并不意味着如果针中的所有元素也存在于干草堆中就认为它是匹配的。这意味着如果干草堆包含与针完全相同(不多不少)的元素的数组,则认为它是匹配的。 - marekful
你能解释一下为什么吗?更新我刚刚使用了array(array('foo', 'bar'), array('fjord', 'troz'));,但仍然没有匹配。 - Jamie
@Jamie 在这个例子中,干草堆是一个嵌套数组,其中一个嵌套数组是其中一个例子中的针,因此返回一个 true - rolfv1
@Jamie,如果不匹配,那就是你犯了一个错误。看一下手册上的第三个例子。 - marekful
显示剩余2条评论
2个回答

13
为了避免循环,您可以使用array_intersect()
if(count(array_intersect($needle, $haystack)))

谢谢 @rolfv1,array_intersect() 是我需要使用的正确函数。 - Jamie

1
因为 needle 是一个数组,in_array() 在 haystack 中寻找一个数组。以下代码可行:
$needle =  array('fjord', 'troz');
//$haystack =  array('troz', 'zort', 'fran', 'fjord');
$haystack = array(array("fjord","troz"), array("foo","bar"));
if (in_array($needle, $haystack))
{
echo "match found in the array";
}

{{链接1:EXAMPLE}}


1
array_intersect()是在我的情况下要使用的正确函数,正如@rolfv1所建议的那样。 - Jamie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接