Часто в программировании возникает задача объединить два или несколько списков в один. Например, у вас есть список утренних дел и список вечерних, а вы хотите получить общий план на день. Для таких операций в PHP существует мощная функция `array_merge()`.
Однако её поведение не всегда очевидно. Она работает по-разному в зависимости от того, какие ключи у массивов: числовые или строковые. В этом тренажере мы разберем все тонкости: от простого "склеивания" индексированных массивов до хитрого слияния ассоциативных, где одни значения могут перезаписывать другие. Также ты узнаешь, что происходит с ключами при слиянии и как объединить сразу несколько массивов за один раз. Это ключевая функция, которую нужно знать, чтобы уверенно работать с данными.
- Модуль 1: Основы синтаксиса PHP
- Модуль 2: Переменные и типы данных
- Модуль 3: Операторы
- Модуль 4: Условные конструкции
- Модуль 5: Циклы
- Модуль 6: Массивы
- Индексированные массивы.
- Ассоциативные массивы.
- Многомерные массивы.
- Добавление элементов в массив.
- Удаление элементов из массива.
- Функция count().
- Функция array_push() и array_pop().
- Функция array_shift() и array_unshift().
- Функция array_merge().
- Функция array_slice().
- Функция array_splice().
- Функция in_array().
- Функция array_search().
- Функция array_keys() и array_values().
- Функция array_unique().
- Функция array_reverse().
- Сортировка: sort(), rsort().
- Сортировка: asort(), arsort().
- Сортировка: ksort(), krsort().
- Функция array_map().
- Функция array_filter().
- Функция array_reduce().
- Функция array_walk().
- Функция array_column().
- Деструктуризация массивов.
- Модуль 7: Функции
- Объявление функций.
- Вызов функций.
- Параметры функций.
- Возврат значений return.
- Значения параметров по умолчанию.
- Передача по значению.
- Передача по ссылке.
- Переменное количество аргументов.
- Оператор распаковки ....
- Типизация параметров.
- Типизация возвращаемых значений.
- Nullable типы.
- Union типы (PHP 8).
- Именованные аргументы (PHP 8).
- Анонимные функции.
- Стрелочные функции.
- Замыкания и use.
- Рекурсивные функции.
- Глобальные переменные в функциях.
- Статические переменные в функциях.
- Модуль 8: Работа со строками
- Одинарные и двойные кавычки.
- Экранирование символов.
- Heredoc и Nowdoc синтаксис.
- Функция strlen().
- Функция substr().
- Функция str_replace().
- Функция strpos() и strrpos().
- Функция explode() и implode().
- Функция trim(), ltrim(), rtrim().
- Функция strtolower() и strtoupper().
- Функция ucfirst() и ucwords().
- Функция str_repeat().
- Модуль 9: Суперглобальные переменные
- Модуль 10: Работа с формами
- Модуль 11: Работа с файлами
- Модуль 12: Дата и время
- Модуль 13: Регулярные выражения
- Модуль 14: Сессии и Cookie
- Модуль 15: Include и Require
- Модуль 16: Объектно-ориентированное программирование
- Модуль 17: Пространства имен
- Модуль 18: Обработка ошибок и исключений
- Модуль 19: Работа с JSON и XML
- Модуль 20: Работа с базами данных MySQLi
- Модуль 21: PDO - PHP Data Objects
- Модуль 22: Composer и зависимости
- Модуль 23: cURL и HTTP запросы
- Модуль 24: REST API
- Модуль 25: Безопасность
- Модуль 26: Генераторы и итераторы
- Модуль 27: Reflection API
- Модуль 28: Работа с изображениями
- Модуль 29: Отправка email
- Модуль 30: Паттерны проектирования
- Модуль 31: Тестирование
- Модуль 32: Продвинутые возможности PHP 8+
Простое слияние двух массивов
Начнем с самого простого. У нас есть два списка чисел. Твоя задача — использовать функцию `array_merge()`, чтобы объединить их в один большой массив. Заполни пропуски, чтобы выполнить слияние.
<?php
$first_half = [1, 2, 3];
$second_half = [4, 5, 6];
$full_list = input1S($first_half, input2S);
print_r($full_list);Слияние ассоциативных массивов
Теперь посмотрим, как `array_merge()` работает с ассоциативными массивами. Если у них разные ключи, функция просто объединит их в один массив. Посмотри на код и выбери, как будет выглядеть итоговый массив.
<?php
$user_main = ['name' => 'John'];
$user_details = ['age' => 30];
$full_user = array_merge($user_main, $user_details);
print_r($full_user);Перезапись при совпадении строковых ключей
Это ключевой момент в работе `array_merge()`! Если в обоих массивах есть элемент с одинаковым СТРОКОВЫМ ключом, значение из последнего (правого) массива перезапишет значение из первого. Напиши, какое значение будет у ключа 'status' в итоговом массиве.
<?php
$order = ['id' => 42, 'status' => 'pending'];
$new_data = ['status' => 'shipped', 'updated_at' => '2023-10-27'];
$updated_order = array_merge($order, $new_data);
echo $updated_order['status'];Особый случай: слияние числовых ключей
А вот с числовыми ключами `array_merge()` ведет себя совсем иначе! Значения не перезаписываются, а просто добавляются в конец, при этом все числовые ключи в результирующем массиве переиндексируются. Посмотри на код и выбери правильный результат.
<?php
$arr1 = [0 => 'a', 1 => 'b'];
$arr2 = [0 => 'c'];
$result = array_merge($arr1, $arr2);
print_r($result);Функция возвращает новый массив
`array_merge()` не изменяет исходные массивы, а создает и возвращает новый, объединенный. Программист вызвал функцию, но забыл сохранить ее результат в переменную. Исправь строку вызова `array_merge`, чтобы результат слияния сохранился в переменную `$result`.
<?php$arr1 = [1, 2];$arr2 = [3, 4];array_merge($arr1, $arr2);print_r($result); // Fatal error: Undefined variable $resultСлияние более двух массивов
Функция `array_merge()` может принимать любое количество массивов в качестве аргументов. Дополни код, чтобы объединить три списка продуктов в один общий список покупок.
<?php
$fruits = ['apple', 'banana'];
$vegetables = ['carrot', 'potato'];
$dairy = ['milk', 'cheese'];
$shopping_list = array_merge(input1S, input2S, input3S);
print_r($shopping_list);Приоритет при слиянии настроек
Частый сценарий: есть настройки по умолчанию и есть настройки пользователя. Нам нужно их объединить так, чтобы настройки пользователя имели приоритет. Собери скрипт, который правильно объединит два массива, чтобы итоговый цвет темы был 'dark'.
$user_prefs = ['theme' => 'dark', 'show_avatars' => false];$final_config = array_merge($defaults, $user_prefs);<?phpprint_r($final_config);// Неверный порядок, пользовательские настройки будут перезаписаны$wrong_config = array_merge($user_prefs, $defaults);$defaults = ['theme' => 'light', 'lang' => 'en', 'show_avatars' => true];?>