Menu
Coddy logo textTech

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

Часть раздела Логика и управление потоком путешествия по PHP на Coddy. Урок 15 из 68.

Хотя array_merge() без проблем работает с индексированными массивами, при работе с ассоциативными массивами его поведение существенно меняется. Ключевое различие заключается в том, как он обрабатывает дублирующиеся строковые ключи между объединяемыми массивами.

При объединении associative arrays, если оба array содержат один и тот же строковый ключ, значение из более позднего array перезапишет значение из более раннего array:

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

Обратите внимание, как "theme" изменился с "light" на "dark", а "notifications" изменилось с true на false, тогда как "language" осталось "english", поскольку это значение не было переопределено. Такое поведение делает array_merge() идеальным для систем конфигурации, в которых значения по умолчанию должны переопределяться пользовательскими настройками.

Порядок аргументов имеет значение: значения из arrays, указанных позже в вызове функции, имеют приоритет над более ранними. Такое поведение с перезаписью применяется только к строковым ключам; числовые ключи всегда переиндексируются последовательно, как и в индексированных arrays.

challenge icon

Задание

Легко

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

Формат входных данных: Две строки — каждая строка содержит объект JSON, представляющий ассоциативный массив (пример: {"theme":"light","language":"english"})

Ожидаемый результат: Объединённый массив конфигурации, в котором пользовательские предпочтения переопределяют значения по умолчанию, выведенный с помощью print_r()

Попробуйте сами

<?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Проверьте себя

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

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

Потренируйтесь самостоятельно: Онлайн-компилятор PHP