Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про PHP: array, merge

Чем отличается array_merge() от сложения массивов $c = $a + $b (как ведут себя ключи при совпадении)?

Вопрос проверяет понимание того, как PHP объединяет массивы, особенно при совпадении ключей и при числовых ключах, что часто приводит к неожиданным багам.

Короткий ответ

array_merge() объединяет массивы и, если ключи числовые, переиндексирует значения с нуля. При строковых ключах значения из правого массива перезапишут значения из левого. Оператор + работает как “объединение без перезаписи”: он сохраняет значения из левого массива при совпадении ключей. Из-за этого результаты могут сильно отличаться, даже если массивы выглядят похоже.

Длинный ответ

Обе операции “склеивают” массивы, но делают это по разным правилам. Чтобы не ошибаться, важно разделять случаи: строковые ключи и числовые ключи.

1) array_merge($a, $b)

Определение:
array_merge() — функция, которая объединяет массивы и при совпадении строковых ключей берёт значение из последнего массива, а при числовых ключах — переиндексирует элементы заново.

1.1) Строковые ключи (перезапись справа)

  • Если ключ строковый и есть в обоих массивах, победит значение из $b.

$a = ['host' => 'localhost', 'port' => 3306];
$b = ['port' => 3307];

$c = array_merge($a, $b);
// ['host' => 'localhost', 'port' => 3307]

1.2) Числовые ключи (переиндексация)

  • Числовые ключи не сохраняются, элементы идут “списком” с ключами 0..n-1.

$a = [10 => 'a', 20 => 'b'];
$b = [30 => 'c'];

$c = array_merge($a, $b);
// [0 => 'a', 1 => 'b', 2 => 'c']

1.3) Типичный сценарий использования

  • Склеить списки (числовые ключи) в один список

  • “Наложить” настройки, где правый массив переопределяет левый (строковые ключи)

2) Оператор сложения массивов: $a + $b

Определение:
Оператор + для массивов — это объединение по ключам, где сохраняются все элементы из левого массива, а из правого добавляются только те, чьих ключей ещё нет слева.

2.1) Совпадающие ключи (левый приоритет)

  • Ничего не перезаписывается: если ключ уже есть в $a, значение из $b игнорируется.

$a = ['port' => 3306];
$b = ['port' => 3307];

$c = $a + $b;
// ['port' => 3306]

2.2) Числовые ключи (ключи сохраняются)

  • В отличие от array_merge(), числовые ключи не переиндексируются.

$a = [10 => 'a', 20 => 'b'];
$b = [20 => 'x', 30 => 'c'];

$c = $a + $b;
// [10 => 'a', 20 => 'b', 30 => 'c']

2.3) Типичный сценарий использования

  • Задать значения “по умолчанию” слева, а справа — “добавки”, которые не должны ломать уже заданные ключи

  • Сохранить числовые ключи (когда они имеют смысл)

3) Практическая подсказка: что выбирать

Перед выбором инструмента полезно быстро ответить на 2 вопроса:

  1. Нужна перезапись одинаковых ключей?

    • Да → чаще подходит array_merge()

    • Нет → чаще подходит $a + $b

  2. Важны ли числовые ключи?

    • Да → чаще подходит $a + $b

    • Нет / это список → чаще подходит array_merge()

Краткий вывод

array_merge() удобно для “наложения” данных и склейки списков, но оно переиндексирует числовые ключи и перезаписывает строковые ключи справа. Оператор + сохраняет левый массив как главный и добавляет только отсутствующие ключи, при этом числовые ключи не ломает. Выбор зависит от того, хотите ли вы перезапись и важны ли числовые ключи.

  • Аватар

    PHP Guru

    Mikhail Savin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    5

  • Сложность:

    7

Навыки

  • PHP

    PHP

Ключевые слова

#array

#merge

Подпишись на PHP Developer в телеграм

  • Аватар

    PHP Guru

    Mikhail Savin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.