W3docs

PHP array_product(): умножение всех элементов массива

Узнайте, как PHP array_product() перемножает все значения массива в одно число, как функция работает с float, пустыми массивами и строками.

Функция PHP array_product() перемножает все значения массива и возвращает единственное результирующее число. Она является мультипликативным аналогом array_sum(): там где array_sum() складывает элементы, array_product() их перемножает. Используйте её всякий раз, когда нужно получить накопленное произведение — например, итог цена × количество, совокупный коэффициент нескольких процентных ставок или факториал.

Что рассматривается на этой странице

  • Сигнатура функции и тип возвращаемого значения
  • Базовый пример и порядок формирования результата
  • Поведение с float, пустыми массивами и ключами массива
  • Подводный камень при работе со строками (изменения в PHP 8)
  • Практический пример «итог строки корзины» и ссылки на связанные функции

Синтаксис

array_product(array $array): int|float

array_product() принимает единственный аргумент — массив для перемножения — и возвращает либо int, либо float. Тип возвращаемого значения зависит от значений: если все элементы являются целыми числами, возвращается int; если хотя бы один элемент — float, возвращается float.

Базовый пример

Передайте массив чисел, и array_product() вернёт их произведение. Внутренне функция начинает с 1 (нейтрального элемента умножения) и последовательно умножает каждый элемент на текущий итог: 1 × 1 × 2 × 3 × 4 × 5 = 120.

php— editable, runs on the server

Вывод:

120

Работа с float

Если хотя бы один элемент является float, результат тоже будет float. Это делает array_product() удобной для таких задач, как одновременное применение нескольких коэффициентов.

<?php

$factors = [1.5, 2, 4];
echo array_product($factors); // 1.5 * 2 * 4

?>

Вывод:

12

Примечание: арифметика с плавающей точкой неточна. Для денежных расчётов предпочтительнее использовать целые числа (центы) или библиотеку точной арифметики, такую как BCMath, а не прямое перемножение float.

Пустой массив возвращает 1

Частая неожиданность: пустой массив возвращает 1, а не 0. Это математически корректное пустое произведение — перемножение «ничего» оставляет нейтральный элемент 1 нетронутым, точно так же как сумма пустого набора равна 0.

<?php

echo array_product([]); // 1

?>

Вывод:

1

Ловушка: нечисловые строки

array_product() ожидает числовые значения. Числовые строки вроде "2" автоматически преобразуются в числа, поэтому ["1", "2", "3"] перемножается в 6. Но нечисловая строка вроде "Q" не поддаётся преобразованию — и поведение изменилось в разных версиях PHP:

  • PHP 8.0+ вызывает ошибку TypeError/предупреждение ("Multiplication is not supported on type string") и считает значение равным 0, так что произведение становится 0.
  • PHP 7 и более ранние молча обрабатывали нечисловые строки как 0, также давая 0.

В любом случае конечное произведение обнуляется, поэтому проверяйте или фильтруйте входные данные, если они могут содержать нечисловые строки.

php— editable, runs on the server

Вывод:

0

Ключи игнорируются

array_product() перемножает только значения — ключи, числовые или строковые, не участвуют в вычислении. Это означает, что функция работает одинаково с ассоциативным массивом и с индексированным.

<?php

$cart = ['price' => 9.99, 'qty' => 3];
echo array_product($cart); // 9.99 * 3 = 29.97

?>

Вывод:

29.97

Практический пример: итог строки корзины

Типичное применение — объединение нескольких связанных чисел в одну величину. Здесь array_product() в одном вызове превращает цену за единицу, количество и коэффициент скидки в итоговую сумму строки.

<?php

$unitPrice = 20;
$quantity  = 3;
$discount  = 0.9; // 10% off

$lineTotal = array_product([$unitPrice, $quantity, $discount]);
echo $lineTotal; // 20 * 3 * 0.9

?>

Вывод:

54

Связанные функции

  • array_sum() — складывает элементы вместо их перемножения.
  • array_reduce() — свёртывает array с любой пользовательской операцией, когда нужно больше, чем простое произведение.
  • array_map() — преобразует значения (например, извлекает одно поле) перед перемножением.
  • array_filter() — отфильтровывает нежелательные элементы перед передачей массива.

Для краткого ознакомления с массивами см. PHP Arrays.

Подведём итог

array_product() — это быстрый и читаемый способ перемножить все значения массива в одно число. Запомните три особенности, которые часто удивляют: тип возвращаемого значения становится float, как только один элемент является float; пустой массив возвращает 1; нечисловые строки обнуляют весь результат. Учитывайте это — и функция станет надёжным инструментом для накопленных произведений.

Практика

Практика
Что делает функция array_product() в PHP?
Что делает функция array_product() в PHP?
Was this page helpful?