PHP 多次元配列の扱い方

多次元配列は、配列の中に配列を入れた構造です。データベースから取得した複数行のレコードや、設定ファイルの階層構造などを表現するのによく使われます。

$users = [
    ['name' => 'Alice', 'age' => 25],
    ['name' => 'Bob', 'age' => 30],
    ['name' => 'Charlie', 'age' => 35]
];

echo $users[0]['name']; // Alice
echo $users[1]['age'];  // 30

アクセスは外側から順にインデックスやキーを指定していきます。$users[0] で最初の要素(配列)を取得し、さらに ['name'] でその中の値を取得する流れです。

連想配列のネスト

設定ファイルのような階層構造は、連想配列をネストして表現します。

$config = [
    'database' => [
        'host' => 'localhost',
        'port' => 3306,
        'name' => 'myapp'
    ],
    'cache' => [
        'driver' => 'redis',
        'ttl' => 3600
    ]
];

echo $config['database']['host']; // localhost
echo $config['cache']['ttl'];     // 3600

ループ処理

foreach をネストして処理します。2 次元配列なら 2 重ループ、3 次元なら 3 重ループになります。

$users = [
    ['name' => 'Alice', 'age' => 25],
    ['name' => 'Bob', 'age' => 30]
];

foreach ($users as $user) {
    foreach ($user as $key => $value) {
        echo "$key: $value\n";
    }
}

ただし、深いネストは可読性を下げます。3 次元以上になる場合は、クラスを使ったオブジェクト指向の設計を検討した方がよいでしょう。

Null 安全なアクセス

存在しないキーにアクセスすると警告が出ます。PHP 8 以降では Null 合体演算子 ?? を使うと安全にデフォルト値を設定できます。

$config = ['database' => ['host' => 'localhost']];

// キーが存在しない場合のデフォルト値
$port = $config['database']['port'] ?? 3306;
echo $port; // 3306