Слияние ассоциативных массивов
Часть раздела Логика и управление потоком путешествия по 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() идеальным для систем конфигурации, где вы хотите, чтобы значения по умолчанию переопределялись пользовательскими настройками.
Порядок аргументов имеет значение — значения из массивов, указанных позже в вызове функции, имеют приоритет над предыдущими. Это поведение перезаписи применяется только к строковым ключам; числовые ключи всегда переиндексируются последовательно, так же как и в индексированных массивах.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Задание
ЛегкоВы получите два входных значения: массив конфигурации по умолчанию и массив пользовательских настроек, оба в формате 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);
?>В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
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'Итоги: Сортировка таблицы лидеров