检查数字索引数组是否在关联数组中时,in_array()将不起作用

时间:2014-05-29 15:24:21

标签: php arrays

有人可以解释为什么in_array()在以下示例中返回false:

$arrA=array('apple');
$arrB=array(
          'first'=>'banana',
          'second'=>'apple'
          );
var_dump(in_array($arrA,$arrB)); // false

在相关说明中:如果$arrA有多个元素,我该如何检查$arrA中{strong> {/ 1>}的任何/至少一个值是否在$arrB }?

谢谢!

7 个答案:

答案 0 :(得分:1)

您搜索数组,而不是字符串:

$arrA=array('apple');
$arrB=array(
          'first'=>'banana',
          'second'=>'apple'
          );
var_dump(in_array($arrA,$arrB)); // false
var_dump(in_array('apple',$arrB)); // true

答案 1 :(得分:1)

其他一些答案似乎有skimped on the documentation,特别是这个注释:

 Changelog  
 Version    Description  
 4.2.0      needle may now be an array.

问题在于,当你在一个数组中搜索一个数组时,你不是在寻找每个项目,你正在寻找整个 < / em>的

在您的情况下,$arrAarray('apple'),因此in_array会在array('apple')中查找$arrB
返回值为false的原因是因为array('apple') 在整个$arrB中不是,即使内容是。

这个例子应该有助于澄清一些事情:

$arrA = array('apple');

$arrB = array(
          'first' => 'banana',
          'second'=> 'apple'
          );

$arrC = array(
          'first' => 'banana',
          'second'=> array('apple')
          );

var_dump(in_array($arrA, $arrB)); // false
var_dump(in_array($arrA, $arrC)); // true

如果您想查看$arrA$arrB中存在哪些项目,则应使用array_intersect

答案 2 :(得分:0)

in_array函数的目的是确定数组(haystack)中是否存在单个值(&#39; needle&#39;)。

您似乎想要做的是找到一个数组中的一个或多个值存在于另一个数组中的位置。这称为交集,可以使用array_intersect在PHP中完成。 http://www.php.net/manual/en/function.array-intersect.php

答案 3 :(得分:0)

in_array($item, $array)测试$item$array中的值之一。 $arrB中的值是字符串,但$arrA是一个完整的数组。数组与字符串不同,即使数组只包含一个字符串的单个元素。你可以使用:

in_array($arrA[0], $arrB) // true

如果要测试两个数组是否有任何共同的元素,请使用:

count(array_intersect($arrA, $arrB)) > 0

答案 4 :(得分:0)

in_array第一个参数needle类型为mixed

你可以这样做:

var_dump(in_array('apple', array_values($arrB))); // true
// or
var_dump(in_array('apple', $arrB)); // true

如果要检查多个项目,可以创建一个这样的辅助函数:

$arrB=array(
          'first'=>'banana',
          'second'=>'apple'
          );

function checkInArray($toCheck, $sourceArray) {
    $totalIn = 0;
    foreach ($toCheck as $k => $v) {
        if (in_array($v, $sourceArray))
            $totalIn++;
    }
    return ($totalIn == sizeof($toCheck));
}

var_dump(checkInArray(array('apple','banana'), $arrB)); // true

答案 5 :(得分:0)

使用array_intersect()可以帮助您

$arrA=array('apple');
$arrB=array(
      'first'=>'banana',
      'second'=>'apple'
      );
if(array_intersect($arrA, $arrB))
echo"yes exist";

详细了解array_intersect

答案 6 :(得分:0)

in_array检查确切的数组匹配匹配

$arrA=array('apple');
$arrB=array(
    'first'=>'banana',
    'second'=>'apple'
);
$arrC=array(
    'first'=>array('banana'),
    'second'=>array('apple')
);
echo var_export(in_array($arrA,$arrB),true) . "<br/>\n"; // false
echo var_export(in_array($arrA[0],$arrB),true) . "<br/>\n"; // true
echo var_export(in_array($arrA,$arrC),true) . "<br/>\n"; // true