这是我的代码
$arr = array('id', 'string');
// check keys do not contain id or string
if(in_array($arr, $keys) == true) {
return false;
} else {
var_dump($keys);
var_dump($arr);
}
return true;
来自函数的回复;
array (size=2)
0 => string 'mohooho' (length=14)
1 => string 'string' (length=6)
array (size=2)
0 => string 'id' (length=2)
1 => string 'string' (length=6)
boolean true
我生气了吗?还是我累了?这到底是怎么回事?
修改
好的,在我的机器上我有这个,我可以发誓我的母亲的生活,我正在使用wamp php 5.4
// check keys do not contain id or string
if(in_array(array('string', 'id'), array('string', 'id'))) {
echo 'IN ARRAY';
} else {
echo 'ERROR!';
}
http://writecodeonline.com/php/<<<< 在此处测试代码
我得到ERROR!
,
但这很有效,
// check keys do not contain id or string
if(in_array('string', array('string', 'id'))) {
echo 'IN ARRAY';
} else {
echo 'ERROR!';
}
我现在得到了正确的回复IN_ARRAY
有什么想法吗?
答案 0 :(得分:2)
我可以想到为什么会返回ERROR
:
if (in_array(array('string', 'id'), array('string', 'id')))
{
echo 'IN ARRAY';
}
else
{
echo 'ERROR!';
}
是因为PHP正在针对针本身检查每个haystack的值。假设您有2个这样的数组:
$a = array('string', 'id');
$b = array('string', 'id');
$a
和$b
是一样的吗?如果您将这些内容提供给in_array
,$a
是针,而$b
是大海捞针,则检查$b[0]
是否等于$a
?假。但是如果你像这样制作数组并做in_array($a, $b)
:
$a = array('string', 'id');
$b = array(array('string', 'id'), 'id');
它将返回true,因为$b[0]
等于$a
本身或干草堆中发生$a
的地方$b
。