既存の連想配列に対して、新しいキーを追加し、その値として空の配列([])をセットするには、追加したいキーが1つなのか複数なのかによっていくつかの方法があります。
1. キーを1つだけ追加する場合
直接キーを指定して、空の配列を代入するのが最もシンプルです。
$data = ['name' => 'Taro'];
// キーを追加して空の配列をセット
$data['hobbies'] = [];
print_r($data);
// 結果: ['name' => 'Taro', 'hobbies' => []]
2. 複数のキーをまとめて追加する場合
パターンA: foreach を使う
追加したいキーのリストがある場合は、ループで回して追加します。
$data = ['name' => 'Taro'];
$keysToAdd = ['hobbies', 'skills', 'friends'];
foreach ($keysToAdd as $key) {
// 既にキーが存在する場合は上書きしないようにする安全な書き方
if (!array_key_exists($key, $data)) {
$data[$key] = [];
}
}
パターンB: array_fill_keys と + 演算子を使う
関数を使って一行で処理したい場合に便利です。配列の結合演算子 + を使うと、既存のデータ(キー)を上書きせずに新しいキーだけを追加してくれます。
$data = ['name' => 'Taro', 'skills' => ['PHP']];
$keysToAdd = ['hobbies', 'skills', 'friends'];
// array_fill_keys で ['hobbies' => [], 'skills' => [], 'friends' => []] を作り、
// 元の配列に結合する
$data += array_fill_keys($keysToAdd, []);
print_r($data);
/* 結果:
Array
(
[name] => Taro
[skills] => Array ( [0] => PHP ) // ← 既存のキーは上書きされず保持される
[hobbies] => Array ( )
[friends] => Array ( )
)
*/
既存の配列の値を誤って初期化(空の配列で上書き)してしまわないよう、複数のキーを追加する場合は 「パターンB(+ 演算子)」 または 「パターンAの array_key_exists によるチェック」 を行うのが安全です。
