[英]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.
問題是,當您在數組中搜索數組時,您並不是在尋找針頭中的每個項目 ,而是在尋找針頭整體 。
在您的情況下, $arrA
是array('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.