有人可以解释为什么in_array()
在以下示例中返回false:
$arrA=array('apple');
$arrB=array(
'first'=>'banana',
'second'=>'apple'
);
var_dump(in_array($arrA,$arrB)); // false
在相关说明中:如果$arrA
有多个元素,我该如何检查$arrA
中{strong> {/ 1>}的任何/至少一个值是否在$arrB
}?
谢谢!
答案 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>的
在您的情况下,$arrA
为array('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