-11

这是我的代码

$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

有什么想法吗?

4

1 回答 1

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

于 2013-03-16T07:44:18.767 回答