将关联数组的键数组与整数索引数组进行比较

时间:2012-07-05 19:45:47

标签: php arrays associative-array

我编写了以下代码来检查数组是否是关联的

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

对于以下数组返回true:

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

和false

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

array("a" =>9);

为什么对于具有单个元素的关联数组,它返回false?

1 个答案:

答案 0 :(得分:8)

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

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

这会生成两者的correct output为真。

否则,类型juggling会将单个元素数组的值视为相等:

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

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