5

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

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?

4

1 回答 1

8

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

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

这会产生正确的输出,它们都为真。

否则类型杂耍将认为单个元素数组的值相等:

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

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

于 2012-07-05T19:48:44.820 回答