簡體   English   中英

in_array()在檢查數字索引數組是否在關聯數組中時不起作用

[英]in_array() won't work when checking if numeric indexed array is in associative array

可以為以下示例解釋為什么in_array()返回false的原因:

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

在一個相關的說明:如果$arrA有一個以上的元素,我將如何檢查是否任何/至少一個價值$arrA$arrB

謝謝!

您搜索數組,而不是字符串:

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

這些其他答案中的一些似乎已經忽略了文檔 ,特別是此注釋:

 Changelog  
 Version    Description  
 4.2.0      needle may now be an array.

問題是,當您在數組中搜索數組時,您並不是在尋找針頭中的每個項目 ,而是在尋找針頭整體

在您的情況下, $arrAarray('apple') ,因此in_array$arrB查找array('apple')
返回值為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

in_array函數的目的是確定數組( haystack )中是否存在單個值(“ needle”)。

您似乎想做的是找到一個數組中一個或多個值在另一個數組中的位置。 這被稱為交集,可以在PHP中使用array_intersect http://www.php.net/manual/en/function.array-intersect.php

in_array($item, $array)測試$item是否$item $array中的值之一。 $arrB中的值是字符串,但是$arrA是整個數組。 即使數組僅包含單個元素即字符串,數組也不是與字符串相同的東西。 您可以使用:

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

如果要測試兩個數組是否有相同的元素,請使用:

count(array_intersect($arrA, $arrB)) > 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

使用array_intersect()可以工作

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

閱讀有關array_intersect的更多信息

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM