Avatar ·

Как добавить элементы в пустой массив в PHP?

Всем привет! Я только начал изучать PHP и столкнулся с проблемой. Мне нужно создать пустой массив, а затем динамически добавлять в него элементы по мере обработки данных. Например, у меня есть список товаров, и я хочу собрать только те, у которых цена больше 100 рублей. Я написал такой код: ```php $filtered_items = array(); foreach ($items as $item) { if ($item['price'] > 100) { // Вот тут я не знаю, как правильно добавить элемент } } ``` Пробовал писать `$filtered_items[] = $item;` и `array_push($filtered_items, $item);` — оба варианта вроде работают, но я не понимаю, в чем разница и какой способ правильнее. Еще слышал, что можно использовать `array_push` с несколькими элементами сразу. Также меня интересует, можно ли добавлять элементы не в конец, а в начало массива? Подскажите, пожалуйста, как профессионалы решают такую задачу. Мне важно понять не только синтаксис, но и лучшие практики: что быстрее, что читаемее, и когда какой метод применять. Заранее спасибо! <<>>

Два основных способа добавления элементов в массив

В PHP есть два основных способа добавить элемент в конец массива. Оба корректны, но между ними есть нюансы.

1. Оператор квадратные скобки $array[] = $value

Это самый простой и рекомендуемый способ для добавления одного элемента. PHP автоматически присваивает новый числовой ключ (на единицу больше максимального существующего ключа).

// Создание пустого массива
$fruits = [];

// Добавление элементов
$fruits[] = 'apple';
$fruits[] = 'banana';
$fruits[] = 'orange';

print_r($fruits);
// Результат:
// Array ( [0] => apple [1] => banana [2] => orange )

Почему это часто лучший выбор:

  • Короче и читаемее — сразу видно, что элемент добавляется
  • Нет лишнего вызова функции — чуть быстрее работает
  • Идеально для циклов и динамического наполнения

2. Функция array_push()

Позволяет добавить сразу несколько элементов. Полезна, когда нужно добавить много значений одной строкой.

$colors = ['red', 'green'];

// Добавление одного элемента
array_push($colors, 'blue');

// Добавление нескольких элементов
array_push($colors, 'yellow', 'purple', 'cyan');

print_r($colors);
// Array ( [0] => red [1] => green [2] => blue [3] => yellow [4] => purple [5] => cyan )

Когда использовать:

  • Когда нужно добавить 2+ элемента за раз
  • В функциональном стиле программирования (цепочки вызовов)
  • Когда массив передаётся по ссылке в другую функцию

Добавление в начало массива

Если нужно вставить элемент в начало, используйте array_unshift(). Она сдвигает все существующие элементы вправо.

$queue = ['second', 'third'];
array_unshift($queue, 'first');

print_r($queue);
// Array ( [0] => first [1] => second [2] => third )

Добавление с указанием ключа

Если вам нужен конкретный ключ (не числовой), просто присвойте значение:

$user = [];
$user['name'] = 'Иван';
$user['age'] = 30;
$user['email'] = 'ivan@example.com';

Решение вашей задачи с товарами

Вот как должен выглядеть ваш код:

$filtered_items = []; // современный синтаксис вместо array()

foreach ($items as $item) {
    if ($item['price'] > 100) {
        $filtered_items[] = $item; // самый простой и быстрый способ
    }
}

Производительность и лучшие практики

  • Скорость: $array[] немного быстрее array_push() для одного элемента, потому что нет накладных расходов на вызов функции
  • Читаемость: $array[] = $value интуитивно понятнее — это как "добавить в массив"
  • Инициализация: Всегда используйте $array = [] вместо $array = array() — это короче и современнее (PHP 5.4+)
  • Проверка на пустоту: Если массив ещё не объявлен, используйте $array[] = $value — PHP сам создаст массив (но лучше объявлять явно для ясности)

В итоге: для вашей задачи с товарами идеально подходит $filtered_items[] = $item внутри цикла. Просто, быстро и понятно.

<<>>

Альтернативный подход: использование array_push с переменным числом аргументов

Иногда полезно знать, что array_push() можно комбинировать с распаковкой массива (оператор ... в PHP 5.6+). Это удобно, когда у вас есть готовый массив элементов, которые нужно добавить.

$existing = [1, 2, 3];
$new_items = [4, 5, 6];

// Добавление всех элементов из $new_items в $existing
array_push($existing, ...$new_items);

print_r($existing);
// Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 )

Это эквивалентно:

foreach ($new_items as $item) {
    $existing[] = $item;
}

Важное предостережение

Не пытайтесь использовать array_push() в цикле для добавления одного элемента — это избыточно. Сравните:

// Плохо (лишний вызов функции на каждой итерации)
foreach ($data as $d) {
    array_push($result, $d);
}

// Хорошо (минимальный синтаксис)
foreach ($data as $d) {
    $result[] = $d;
}

Также помните, что array_push() возвращает новое количество элементов в массиве, а не сам массив. Это может пригодиться для проверок:

$count = array_push($arr, 'new');
echo "Теперь в массиве $count элементов";

В целом, для 90% случаев используйте $array[] = $value. Это стандарт де-факто в современном PHP.