PHP 配列と連想配列の違い

PHP では配列と連想配列は内部的に同じデータ構造で実装されています。他の言語のように「配列は配列、連想配列は別の型」という区別はありません。すべてが順序付きマップとして動作します。

通常の配列

キーが 0, 1, 2… と自動的に振られる。要素の追加は $arr[] = 値 で末尾に追加される。

連想配列

キーを明示的に指定する。$arr['key'] = 値 のように文字列キーで管理する。

両者を混在させることも可能ですが、意図しないバグの原因になりやすいので避けるべきです。

// 混在例(非推奨)
$mixed = [
    'name' => 'Alice',
    'banana',        // キーは 0
    'age' => 25,
    'orange'         // キーは 1
];

echo $mixed[0]; // banana
echo $mixed[1]; // orange

判定方法

PHP には「連想配列かどうか」を直接判定する関数がありません。キーが 0 から連続した整数かどうかをチェックするのが一般的なアプローチです。

function isAssoc(array $arr): bool {
    if ($arr === []) {
        return false;
    }
    return array_keys($arr) !== range(0, count($arr) - 1);
}

$list = ['a', 'b', 'c'];
$map = ['x' => 1, 'y' => 2];

var_dump(isAssoc($list)); // false
var_dump(isAssoc($map));  // true

使い分けの指針

リストとして順番に処理するなら通常の配列、キーと値のペアを管理するなら連想配列を使います。JSON との相互変換を考えると、この区別は重要になります。通常の配列は JSON の配列 [] に、連想配列は JSON のオブジェクト {} に対応するためです。