Коротко: добавить элементы в массив в PHP можно несколькими способами: $arr[] = $value (в конец), array_push() (в конец, один или несколько), $arr['ключ'] = $value (по ключу), array_merge() (объединить массивы), array_unshift() (в начало). Для «массива в массиве» — добавляем во вложенный элемент по цепочке.
Способы добавления
| Задача | Функция |
|---|---|
| Добавить в конец | $arr[] = $v |
| Добавить несколько в конец | array_push() |
| Добавить по ключу | $arr['key'] = $v |
| Добавить в начало | array_unshift() |
| Слить два массива | array_merge() |
| Слить с сохранением ключей | + (оператор объединения) |
Вкладки: примеры
$list = ['яблоко', 'груша'];
$list[] = 'банан'; // быстрый способ
array_push($list, 'слива'); // то же самое
print_r($list);
// яблоко, груша, банан, слива$arr[] короче и работает чуть быстрее, чем array_push() с одним элементом. array_push() удобен, когда нужно добавить сразу несколько значений.
$user = ['name' => 'Иван'];
$user['email'] = 'ivan@example.com';
$user['roles'][] = 'админ';
print_r($user);
// ['name' => 'Иван', 'email' => ..., 'roles' => ['админ']]По ключу добавляют значения в ассоциативный массив и «вглубь» — во вложенный массив. Если ключа нет, он создастся автоматически.
$queue = ['задача 2', 'задача 3'];
array_unshift($queue, 'задача 1');
print_r($queue);
// задача 1, задача 2, задача 3array_unshift() добавляет в начало и пересчитывает числовые индексы. Для больших массивов эта операция «дорогая» — используйте редко.
$a = ['a' => 1, 'b' => 2];
$b = ['b' => 3, 'c' => 4];
$merged = array_merge($a, $b);
// ключ 'b' перезаписан значением 3
$union = $a + $b;
// ключи из $a приоритетнее, 'b' остаётся 2Разница важна: array_merge() перезаписывает значения по строковым ключам и «перенумеровывает» числовые, а оператор + оставляет первое встреченное значение.
array_merge() строковые ключи перезаписываются «справа налево». Это частая причина «пропавших» настроек — если объединяете конфиги, проверяйте порядок аргументов.Добавление «массива в массив»
$cart = [];
$cart[] = ['id' => 1, 'qty' => 2];
$cart[] = ['id' => 5, 'qty' => 1];
// добавить во вложенный массив по ключу
$users['ivan']['orders'][] = 1001;Чтобы добавить значение во вложенный массив, дойдите до него цепочкой ключей и примените [] =.
Практика: собрать данные
- Начните с пустого массива
$result = [];. - В цикле добавляйте элементы:
$result[] = $row;. - Для ассоциативных — задавайте ключи:
$result[$id] = $row;. - Объединяйте части через
array_merge(). - Проверьте структуру через
print_rперед выводом.
$result = [];
foreach ($rows as $row) {
$result[$row['id']] = $row['title'];
}Частые ошибки: причина → решение
| Симптом | Причина | Решение |
|---|---|---|
| Ключ «пропал» | array_merge перезаписал |
проверить порядок аргументов |
| Ошибка «не массив» | переменная не инициализирована | начать с $arr = [] |
| Индексы «сбились» | array_unshift пересчитал |
учитывать при работе с ключами |
| Два одинаковых элемента | не проверяли наличие | in_array() перед добавлением |
Проверьте себя
array_merge опасен для конфигов?
Вопросы и ответы
Для одного элемента $arr[] = $v чуть быстрее и короче. array_push() удобен для нескольких значений сразу.
$arr[] = $innerArray; — вложенный массив добавится как один элемент. Если нужно «разложить» его элементы — используйте array_merge().
Проверьте in_array($v, $arr, true) перед добавлением или используйте ключи массива как «множество».
Оператором +: $a + $b — ключи первого массива имеют приоритет, значения не перезаписываются.
Итоги
- В конец —
$arr[] = $v; несколько —array_push(). - По ключу —
$arr['key'] = $v, включая вложенные массивы. - В начало —
array_unshift()(пересчитывает индексы). array_merge()перезаписывает по строковым ключам, оператор+— нет.

Комментарии
Пока комментариев нет — будьте первым, кто поделится мнением.