Menu
Coddy logo textTech

Слияние ассоциативных массивов

Часть раздела Логика и управление потоком путешествия по PHP на Coddy — урок 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

Задание

Легко

Вы получите два входных значения: массив конфигурации по умолчанию и массив пользовательских настроек, оба в формате JSON. Прочитайте оба входных значения, преобразуйте каждую строку JSON в ассоциативный массив, используйте array_merge() для их объединения (при этом пользовательские настройки должны переопределять значения по умолчанию) и выведите объединенную конфигурацию с помощью print_r().

Формат входных данных: Две строки — каждая строка содержит объект 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
// Чтение двух входных данных 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Проверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком