Menu
Coddy logo textTech

連想配列の結合

CoddyのPHPジャーニー「論理とフロー」セクションの一部 — レッスン 15/68。

array_merge() は添字配列ではシームレスに動作しますが、連想配列を扱う場合にはその動作が大きく異なります。主な違いは、マージされる配列間で重複する文字列キーをどのように処理するかという点にあります。

連想配列をマージする際、両方の配列に同じ文字列キーが含まれている場合、後の配列の値が前の配列の値を上書きします:

<?php
$defaults = ["theme" => "light", "language" => "english", "notifications" => true];
$userSettings = ["theme" => "dark", "notifications" => false];
$finalConfig = array_merge($defaults, $userSettings);
print_r($finalConfig);
// 出力: Array ( [theme] => dark [language] => english [notifications] => false )
?>

"theme" が "light" から "dark" に変わり、"notifications" が true から false に変わった一方で、"language" は上書きされなかったため "english" のままになっていることに注目してください。この動作により、array_merge() はデフォルト値をユーザー設定で上書きしたい設定システムに最適です。

引数の順序は重要です。関数呼び出しにおいて、後の方に記述された配列の値が、前の方の配列の値よりも優先されます。この上書きの挙動は文字列キーにのみ適用されます。数値キーは、添字配列と同様に、常に連番で振り直されます。

quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

challenge icon

チャレンジ

簡単

2つの入力(JSON形式のデフォルト設定配列とユーザー設定配列)を受け取ります。両方の入力を読み込み、各JSON文字列を連想配列に変換し、array_merge()を使用してそれらを結合(ユーザー設定がデフォルトを上書きするように)し、結合された設定をprint_r()を使用して出力してください。

入力形式: 2行 - 各行には連想配列を表すJSONオブジェクトが含まれます(例: {"theme":"light","language":"english"}

期待される出力: ユーザー設定がデフォルト値を上書きした、結合された設定配列をprint_r()を使用して表示したもの

チートシート

array_merge() で連想配列をマージする場合、重複する文字列キーは後の配列の値によって上書きされます:

<?php
$defaults = ["theme" => "light", "language" => "english", "notifications" => true];
$userSettings = ["theme" => "dark", "notifications" => false];
$finalConfig = array_merge($defaults, $userSettings);
print_r($finalConfig);
// 出力: Array ( [theme] => dark [language] => english [notifications] => false )
?>

主な動作:

  • 同じ名前の文字列キー:後の配列の値が前の値を上書きします
  • 順序が重要:後に指定された配列が優先されます
  • 数値キーは常に連続して再インデックスされます
  • デフォルト値とユーザーによる上書きを伴う設定システムに最適です

自分で試してみよう

<?php
// 2つのJSON入力を読み込む
$defaultConfig = fgets(STDIN);
$userPreferences = fgets(STDIN);

// JSON文字列を連想配列に変換する
$defaultArray = (array)json_decode($defaultConfig, true);
$userArray = (array)json_decode($userPreferences, true);

// TODO: 配列をマージするために、以下にコードを記述してください


// マージされた設定を出力する
print_r($mergedConfig);
?>
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

論理とフローのすべてのレッスン