array_push($arr, $value) добавляет значение в конец массива. Для одного значения сокращение $arr[] = $value; делает ту же работу без вызова функции, и именно оно встречается в большей части PHP-кода. Оба способа меняют массив на месте.
array_push() принимает массив по ссылке, поэтому изменяет переданную переменную. Она возвращает новое число элементов, которое можно игнорировать.
array_push и $arr[] =
Для одного значения используйте $arr[] = $value: это короче и обходится без вызова функции, что заметно в большом цикле. array_push() берите, когда нужно добавить несколько значений одной инструкцией или распаковать в массив список значений.
$arr[] = работает и с переменной, которой ещё нет: PHP создаст массив. array_push() нужен существующий массив: для неопределённой переменной она выбрасывает TypeError: array_push(): Argument #1 ($array) must be of type array, null given.
Добавление ключа и значения
array_push() добавляет значения только со следующим целочисленным ключом. Чтобы добавить именованный ключ, присвойте по нему. Чтобы добавить несколько пар сразу, используйте += (сохраняет существующие ключи) или array_merge() (новые значения побеждают).
Разница между + и array_merge() при совпадении ключей описана на странице про array_merge.
Добавление в начало: array_unshift
array_unshift($arr, $value) вставляет значение в начало. Целочисленные ключи перенумеровываются, чтобы новое значение получило индекс 0; строковые ключи остаются как есть. Как и array_push(), она принимает несколько значений и возвращает новое число элементов.
Чтобы поставить первой именованную пару, соберите новый массив: $menu = ['login' => '/login'] + $menu;.
Вставка в определённую позицию
array_splice($arr, $offset, 0, $values) вставляет, ничего не удаляя: начинает с $offset, удаляет 0 элементов и ставит туда новые значения. Целочисленные ключи после места вставки перенумеровываются.
array_splice() умеет также удалять и заменять элементы; эти формы показаны на странице об удалении элементов.
Добавление другого массива
array_push($a, $b) добавляет $b как один вложенный элемент, а это редко то, что нужно. Чтобы добавить значения $b по одному, распакуйте их или соберите новый массив через синтаксис распаковки или array_merge().
Частая ошибка: присваивание возвращаемого значения
array_push() возвращает число, новое количество элементов. Если присвоить его обратно переменной с массивом, массив заменится целым числом, и следующий array_push() для неё выбросит TypeError.
То же касается array_unshift() и sort(), которая возвращает true. Функции, которые меняют массив на месте, возвращают статус, а не массив.
Часто задаваемые вопросы
Чем array_push отличается от $arr[] в PHP?
Оба добавляют в конец. $arr[] = $x; добавляет одно значение без вызова функции, поэтому это обычный выбор, и он немного быстрее. array_push($arr, $a, $b, $c) удобна, когда добавляете несколько значений сразу, и возвращает новое число элементов.
Как добавить ключ и значение в массив PHP?
Присвойте по ключу: $arr['color'] = 'blue';. array_push() так не умеет, потому что всегда берёт следующий целочисленный ключ. Чтобы добавить несколько пар сразу, используйте $arr += ['a' => 1, 'b' => 2]; или array_merge().
Как добавить элемент в начало массива в PHP?
Используйте array_unshift($arr, $value). Функция перенумеровывает целочисленные ключи, чтобы новое значение получило индекс 0; строковые ключи остаются как есть.
Почему массив превращается в число после array_push?
Потому что array_push() возвращает новое число элементов, а не массив. Запись $arr = array_push($arr, 'x'); заменяет массив этим числом. Вызывайте функцию отдельной строкой: array_push($arr, 'x');.