2013-03-16 70 views
-11

这里是我的代码PHP数组不工作

$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; 

从功能repsonse;

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

'$ keys'的值是什么? – Ranjith 2013-03-16 07:15:20

+0

你可以在底部看到它,$ keys是第一个var_dump,而$ arr是第二个,喜欢反对票的人有些人在这里很残酷! – Griff 2013-03-16 07:16:31

+1

为什么'string'mohooho''的长度是14?它来自哪里? – DCoder 2013-03-16 07:18:19

回答

2

我能想到的为什么这个返回ERROR原因:

if (in_array(array('string', 'id'), array('string', 'id'))) 
{ 
    echo 'IN ARRAY'; 
} 
else 
{ 
    echo 'ERROR!'; 
} 

是因为PHP是检查每一个草堆的价值观对针本身。假设你有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'); 

因为$b[0]等于$a本身,否则将返回true无论$a发生是$b草堆内。