我编写了以下代码来检查数组是否是关联的
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?
答案 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
为假。