Умножение индексов массивов в PHP с помощью array_reduce

Почему array_reduce() метод работает по-разному при сложении и умножении? Когда я добавляю значения массива ниже, код выдает ожидаемый результат: 15. Но когда я умножаю, он возвращает: 0. Тот же код... Разница лишь в том, что + знак переключается на * знак.

  function sum($arr){
        print_r(array_reduce($arr, function($a, $b){return $a + $b;}));
    }

    function multiply($arr){
        print_r(array_reduce($arr, function($a, $b){return $a * $b;}));
    }

    sum(array(1, 2, 3, 4, 5)); // 15
    multiply(array(1, 2, 3, 4, 5)); // 0

1 ответ

Решение

Согласно документации, вы можете попробовать

function multiply($arr){
        print_r(array_reduce($arr, function($a, $b){return $a * $b;},1));
}

Вот цитата из этой дискуссии:

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

Другие вопросы по тегам