Слияние ассоциативных массивов
Часть раздела Логика и управление потоком путешествия по 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.
Задание
ЛегкоВы получите два входа: массив конфигурации по умолчанию и массив пользовательских предпочтений, оба в формате 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);
?>В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Продвинутые функции
Анонимные функцииЗамыкания и 'use'Стрелочные функцииCallback-функцииИспользование 'call_user_func'Функции переменныхПередача по ссылкеРекурсивные функцииИтоги: ассорти из функций4Многомерные массивы
Создание 2D-массиваДоступ к элементам 2D-массиваИзменение элементов 2D-массиваИтерация с вложенными цикламиДвумерные ассоциативные массивыИтоги: Упражнение «Простая сетка»2Продвинутая работа с массивами
Добавление с помощью 'array_push'Удаление с помощью 'array_pop'Добавление с помощью 'array_unshift'Удаление с помощью 'array_shift'Слияние индексных массивовСлияние ассоциативных массивовИзвлечение с помощью 'array_slice'Поиск значений с 'in_array'Поиск ключей с 'array_search'Итоги: Упражнение «Плейлист»3Сортировка массивов
Сортировка индексных массивов по возрастаниюСортировка индексных массивов по убываниюСортировка ассоциативных массивов по значениюСортировка ассоциативных массивов по ключуСортировка в естественном порядкеПользовательская сортировка с помощью 'usort'Итоги: Сортировка таблицы лидеровПотренируйтесь самостоятельно: Онлайн-компилятор PHP