【问题标题】:php in_array() with an array as needle producing unexpected resultsphp in_array() 将数组作为针产生意外结果
【发布时间】:2018-01-13 23:15:57
【问题描述】:

我有一个简单的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/en/function.in-array.php,但不确定为什么我没有得到匹配。

【问题讨论】:

  • 因为 needle 是一个数组 in_array() 正在寻找一个数组。
  • 你会匹配这个干草堆:array(array('foo', 'bar'), array('fjord', 'troz')); 当 needle 是一个数组时,如果 needle 中的所有元素也存在于干草堆中,这并不意味着它是匹配的。这意味着如果 haystack 包含一个与 needle 具有完全相同的元素(不多也不少)的 array,则认为它是匹配的。
  • 你能解释一下为什么吗? 更新 我刚刚用array(array('foo', 'bar'), array('fjord', 'troz')); 运行但仍然没有匹配。
  • @Jamie 在该示例中,干草堆是一个嵌套数组,其中一个嵌套数组是其中一个示例中的针,因此返回 true
  • @Jamie,如果不匹配,你就搞错了。查看手册页上的示例 #3。

标签: php arrays


【解决方案1】:

为避免循环,您可以使用array_intersect():

if(count(array_intersect($needle, $haystack)))

【讨论】:

  • 谢谢@rolfv1 array_intersect() 是用于我的目的的正确功能。
【解决方案2】:

因为 needle 是一个数组 in_array() 正在大海捞针中寻找一个数组。以下作品:

$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";
}

EXAMPLE

【讨论】:

  • 接受,因为这回答了问题。 @rolfv1 建议,array_intersect() 是在我的情况下使用的正确函数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多