Intereting Posts
Как сохранить значения формы после сообщения Может ли PHP «писать» или «копировать» на удаленном удаленном ресурсе, но не «отключать» или «переименовывать» («Доступ запрещен») Шаблоны проектирования, используемые в Zend Framework Только иметь доступ к методу «GET» в WP REST API – другие возвращают 401 Решение головоломки: поиск всех слов в расширенном Word в PHP Функция gzuncompress PHP в Java? Mysql dyanmic значение как псевдоним Сортировка массива с использованием нескольких критериев в PHP Я хочу использовать функцию bcc или cc в этой функции почты? Требуются условные обозначения PHP, скобки? Как добавить бэкэнд Java на существующий сайт PHP без добавления сервера tomcat для Java Bridge? Можно ли использовать массив в PHP? Трудность запроса двух разных таблиц в базе данных с использованием SQL в PHP-документе Предупреждение: mysql_query () ожидает, что параметр 2 будет ресурсом PDO lastInsertId проблемы, php

многомерный массив array_sum

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

У меня есть массив, похожий на следующий.

[0] => Array ( [id] => 95659865986 [invoiceNumber] => 6374324 [invoiceTitle] => Monthly [invoiceStatus] => Paid [accountId] => 6235218753 [totalExVat] => 158.95 [dateCreated] => 1 Apr 2012 [vatAmount] => 20.00 ) 

Все, что я хочу сделать, это сделать сумму массива на значениях vatAmount этого массива.

Как выглядит, похоже, не много.

 (array_sum($account_invoices['vatAmount']) 

Только способ сделать это:

 $sum = 0; foreach($account_invoices as $num => $values) { $sum += $values[ 'vatAmount' ]; } 

Если у вас есть PHP 5.5+, вы можете сделать это без цикла или использования обратного вызова (поскольку вызовы функций относительно дороги) … просто используйте:

 $sum = array_sum(array_column($account_invoices, 'vatAmount')); 

Я бы использовал array_map, чтобы уменьшить массив только до необходимого. Имейте в виду, что это будет работать только с PHP 5.3.

 $total_vat = array_sum( array_map( function($element){ return $element['vatAmount']; }, $account_invoices)); 

array_map вы можете использовать array_map для сбора значения vatAmout .

 $sum = array_sum(array_map(function($var) { return $var['vatAmout']; }, $account_invoices)); 

Способ сделать это с помощью анонимной функции PHP 5.3+

 $account_invoices = array( 0 => array( 'id' => '95659865986', 'invoiceNumber' => '6374324', 'invoiceTitle' => 'Monthly', 'invoiceStatus' => 'Paid', 'accountId' => '6235218753', 'totalExVat' => 158.95, 'dateCreated' => '1 Apr 2012', 'vatAmount' => 20.00 ), 1 => array( 'id' => '95659865987', 'invoiceNumber' => '6374325', 'invoiceTitle' => 'Monthly', 'invoiceStatus' => 'Paid', 'accountId' => '6235218753', 'totalExVat' => 208.95, 'dateCreated' => '1 May 2012', 'vatAmount' => 25.00 ), ); $sumDetail = 'vatAmount'; $totalVAT = array_reduce($account_invoices, function($runningTotal, $record) use($sumDetail) { $runningTotal += $record[$sumDetail]; return $runningTotal; }, 0 ); echo $totalVAT; 

Вы не можете сделать это непосредственно с помощью array_sum , который суммирует все в массиве.

Вы можете сделать это с помощью цикла:

 $sum = 0; foreach($items as $item) $sum += $item['vatAmount']; 

или вы можете отфильтровать массив (в этом случае это не очень удобно , но если вам приходилось вычислять, скажем, расходы S & H плюс НДС плюс …, от каждого отдельного элемента, а затем суммировать …):

 // Input: an array (element #n of array of arrays), output: VAT field function getVAT($item) { return $item['vatAmount']; } // Array with all VATs $vats = array_map('getVAT', $items); $sum = array_sum($vats); 

Также вы можете это сделать (если вам нравится функция array_sum):

 foreach($account_invoices as $num => $values) { $vatAmount[] = $values[ 'vatAmount' ]; } $Total = array_sum($vatAmount); 

Еще один способ сделать это с помощью array_reduce:

 $vatMount = array_reduce($account_invoices, function($total, $value) { return $total + $value['vatAmount']; }); 

Вы можете сделать это с помощью array_map() и сначала выбрать столбец vatAmount :

 $totalVatAmount = array_sum(array_map(function($account_invoices) { return $account_invoices['vatAmount']; }, $account_invoices)); 

Конечно, внутренне это выполняет двойной цикл; это просто, что вы не видите его внутри кода. Если вы используете array_reduce() вы можете избавиться от одного цикла:

 $totalVatAmount = array_reduce($account_invoices, function($totalAmount, $item) { $totalAmount += $item['vatAmount']; return $totalAmount; }, 0 ); 

Однако, если скорость – это единственный интерес, вы должны использовать foreach . Потому что нет никаких вызовов функций, используемых для вычисления окончательной суммы. Это решение быстрее, чем другое решение.

 $totalVatAmount = 0; foreach ($account_invoices as $item) { $totalVatAmount += $item['vatAmount']; }