Как добавить элемент в массив PHP с указанием ключа и значения
Прямое присвоение — основной способ
Самый простой и правильный способ добавить элемент с ключом в PHP — это прямое присвоение значения по ключу: $array[$key] = $value;. Это работает для любых типов ключей (строки, числа) и является идиоматичным для PHP. Ваш пример с $products['apple'] = 150; — это именно то, что нужно.
Почему array_push не подходит?
Функция array_push() предназначена только для добавления элементов с числовыми индексами. Она игнорирует ключи и всегда добавляет элемент в конец массива с новым числовым индексом. Если попробовать передать ключ, это не сработает:
array_push($products, 'apple', 150); // Добавит два элемента: [0] => 'apple', [1] => 150
Массовое добавление: оператор + и array_merge
Если нужно добавить сразу много элементов с ключами, есть два удобных способа:
- Оператор
+— объединяет массивы, но не перезаписывает существующие ключи. Если ключ уже есть, он останется без изменений. - Функция
array_merge— объединяет массивы и перезаписывает существующие ключи (для строковых ключей). Для числовых ключей — добавляет с новыми индексами.
Пример:
$products = ['apple' => 150, 'banana' => 80];
// Добавляем новые элементы через оператор +
$newItems = ['orange' => 120, 'grape' => 200];
$products = $products + $newItems; // ['apple' => 150, 'banana' => 80, 'orange' => 120, 'grape' => 200]
// Добавляем через array_merge
$moreItems = ['kiwi' => 90, 'apple' => 300]; // apple перезапишется
$products = array_merge($products, $moreItems); // ['apple' => 300, 'banana' => 80, 'orange' => 120, 'grape' => 200, 'kiwi' => 90]
Компактный синтаксис с короткой записью массива (PHP 5.4+)
Можно сразу инициализировать массив с нужными ключами:
$products = [
'apple' => 150,
'banana' => 80,
'orange' => 120
];
А затем добавлять новые элементы через $products['new_key'] = value; — это самый читаемый и производительный способ.
Динамическое добавление в цикле
Если данные приходят из формы или базы данных, используйте цикл:
$products = [];
$dataFromForm = [
['name' => 'apple', 'price' => 150],
['name' => 'banana', 'price' => 80],
];
foreach ($dataFromForm as $item) {
$products[$item['name']] = $item['price'];
}
// Результат: ['apple' => 150, 'banana' => 80]
Функция для добавления с ключом (если очень хочется)
Можно написать свою функцию-обёртку, но в PHP это избыточно:
function array_add_with_key(&$array, $key, $value) {
$array[$key] = $value;
}
$products = [];
array_add_with_key($products, 'apple', 150);
Но лучше просто использовать прямую запись — она короче и понятнее.
Итог
- Используйте
$array[$key] = $value;— это стандарт. - Для массового добавления —
array_merge()(с перезаписью) или оператор+(без перезаписи). - Не пытайтесь применять
array_push()для ассоциативных массивов — он не поддерживает ключи. - Помните, что ключи могут быть только строками или целыми числами. Другие типы автоматически приводятся (например,
trueстанет1, аnull— пустой строкой).
Альтернативный подход: использование array_combine() для создания пар "ключ-значение"
Если у вас уже есть два отдельных массива — один с ключами, другой со значениями — можно использовать функцию array_combine(). Она создаёт ассоциативный массив, где первый массив становится ключами, а второй — значениями. Это удобно, когда данные приходят из двух разных источников (например, из CSV-файла).
Пример:
$keys = ['apple', 'banana', 'orange'];
$values = [150, 80, 120];
$products = array_combine($keys, $values);
// Результат: ['apple' => 150, 'banana' => 80, 'orange' => 120]
Важно: массивы $keys и $values должны быть одинаковой длины, иначе PHP выдаст ошибку. Также все ключи должны быть уникальными — если в массиве ключей есть дубликаты, последний перезапишет предыдущие.
Этот способ особенно полезен при обработке данных из формы с полями, где имена полей — это ключи, а их значения — это значения. Но помните: array_combine() создаёт новый массив, а не добавляет элементы в существующий. Если нужно добавить пары к уже имеющемуся массиву, комбинируйте с array_merge():
$existing = ['kiwi' => 90];
$newPairs = array_combine(['apple', 'banana'], [150, 80]);
$result = array_merge($existing, $newPairs); // ['kiwi' => 90, 'apple' => 150, 'banana' => 80]