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

これにより、両方がtrueであるという正しい出力が生成されます。

それ以外の場合、型ジャグリングは単一要素配列の値を等しいと見なします。

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

ここで"a" == 0は、true( "a"はサイレントに0にキャストされるため)ですが、"a" === 0falseです。

于 2012-07-05T19:48:44.820 に答える