Как суммировать массив с помощью ключа количества в PHP?

#php #arrays

#php #массивы

Вопрос:

У меня есть этот массив:

 array(2) {
  [0]=>
  array(5) {
    ["id"]=>
    string(1) "1"
    ["name"]=>
    string(5) "Test1"
    ["weight"]=>
    string(3) "5.0"
    ["price"]=>
    string(1) "7"
    ["quantity"]=>
    string(1) "2"
  }
  [1]=>
  array(5) {
    ["id"]=>
    string(1) "2"
    ["name"]=>
    string(5) "Test2"
    ["weight"]=>
    string(3) "7.0"
    ["price"]=>
    string(2) "11"
    ["quantity"]=>
    string(1) "1"
  }
}
  

Я могу добавить цену с помощью этого:

 echo array_sum(array_column($items, 'price'));
  

Но у меня возникают проблемы с учетом элементов, количество которых превышает 1. Как я могу правильно суммировать это в PHP?

Редактировать: проблема с моим кодом, если это неясно, заключается в том, что он не учитывает элементы с количеством более 1. Общее количество для этого должно быть 25. Код, который я использовал, говорит, что это 18.

Комментарии:

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

2. Он не учитывает элементы с количеством более 1,

3. Ооо, но это потому, что PHP не волшебный. Вы ничего не кодировали, чтобы учесть количество, поэтому он даже не пытался

4. Да, это был код, который я использовал до того, как добавил количество в массив, как я могу это сделать?

Ответ №1:

 echo array_reduce(
    $items, 
    function($total, $item) {
        $total  = $item['price'] * $item['quantity'];

        return $total;
    }, 
    0
);
  

Или простой foreach :

 $total = 0;
foreach ($items as $item) {
    $total  = $item['price'] * $item['quantity'];
}
echo $total;
  

Комментарии:

1. Какие-либо преимущества в любом случае?

Ответ №2:

Вы можете использовать функцию array_walk

 $total = 0;
array_walk( $arr, function ( $item ) use ( amp;$total )
{
$total  = $item['price'] * $item['quantity'];
});
echo $total;