2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

すでに存在する連想配列に配列のキーだけを追加して値は空の配列を追加する方法

2
Posted at

既存の連想配列に対して、新しいキーを追加し、その値として空の配列([])をセットするには、追加したいキーが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 によるチェック」 を行うのが安全です。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?