PHP list() による配列の分割代入
list() は配列の要素を複数の変数に一度に代入する構文です。JavaScript の分割代入と同じ発想ですが、PHP では関数のような見た目になっています。
$user = ['Alice', 25, 'Tokyo'];
list($name, $age, $city) = $user;
echo $name; // Alice
echo $age; // 25
echo $city; // TokyoPHP 7.1 以降は短縮構文 [] も使えます。こちらの方がモダンな書き方です。
[$name, $age, $city] = ['Alice', 25, 'Tokyo'];一部の要素をスキップ
不要な要素は変数名を省略してスキップできます。
$data = ['first', 'second', 'third', 'fourth'];
// 2 番目と 4 番目だけ取得
[, $second, , $fourth] = $data;
echo $second; // second
echo $fourth; // fourth連想配列の分割代入(PHP 7.1+)
キーを指定して特定の値だけを取り出すこともできます。
$user = ['name' => 'Alice', 'age' => 25, 'email' => 'alice@example.com'];
['name' => $name, 'age' => $age] = $user;
echo $name; // Alice
echo $age; // 25順序に関係なくキー名で取得できるため、連想配列を扱う際に便利です。
ネストした配列の分割
多次元配列も分割できます。
$data = ['Alice', ['Tokyo', 'Japan']];
[$name, [$city, $country]] = $data;
echo $name; // Alice
echo $city; // Tokyo
echo $country; // Japanforeach との組み合わせ
ループ内で配列の要素を展開する際によく使われます。
$users = [
['Alice', 25],
['Bob', 30],
['Charlie', 35]
];
foreach ($users as [$name, $age]) {
echo "$name is $age years old\n";
}連想配列のリストでも同様に使えます。
$users = [
['name' => 'Alice', 'age' => 25],
['name' => 'Bob', 'age' => 30]
];
foreach ($users as ['name' => $name, 'age' => $age]) {
echo "$name: $age\n";
}これにより、ループ内で $user['name'] のようなアクセスを繰り返す必要がなくなり、コードがすっきりします。