2012-07-05 81 views
5

我已经写下面的代码来检查数组是否是关联与否比较关联数组的键阵列整数索引数组

function is_associative($arr) { 
    $arr = array_keys($arr); 
    return $arr != array_keys($arr); 
} 

它对于像阵列返回true:

array("a" => 5,"b" => 9); 

并且对于数字阵列为假

但是,对于具有单个元素的关联数组,它不会返回true:

array("a" =>9); 

为什么它返回false为单个元素的关联数组?

+1

你应该使用'array_diff' – alfasin 2012-07-05 19:49:47

回答

8

你需要在比较中使用!==

return $arr !== array_keys($arr); 

这会产生他们两个是真正的correct output

否则类型杂耍将考虑为单个元件阵列中的值作为等于:

array(1) { [0]=> string(1) "a" } 
array(1) { [0]=> int(0) } 

这里,"a" == 0为真(如“a”被默默地转换为0),但是"a" === 0是假的。

+0

是的,这是问题:谢谢 – 2012-07-05 19:50:36

+0

为什么它们是单一元素数组时不是同一类型? – 2012-07-05 19:51:41

+1

@JinuJD - 我已经更新了我的回答,并更清楚地描述了发生了什么事情 – nickb 2012-07-05 19:54:16