我有一个分组的多维数组。但我想总结数量,并为阵列本身的每个组提供总数。但我正在努力总结数组中每个组的数量 这是我的数组的样子
Array
(
['Network 1'] => Array
(
[0] => Array
(
[MSISDN] => 27729554427
[Network] => 'Network 1'
[Date] => '12-Mar-2016'
[Product] => 'Loan Product 1'
[Amount] => 1000.00
)
[1] => Array
(
[MSISDN] => 27725326345
[Network] => 'Network 1'
[Date] => '18-Mar-2016'
[Product] => 'Loan Product 2'
[Amount] => 3000.00
)
)
['Network 2'] => Array
(
[0] => Array
(
[MSISDN] => 27722342551
[Network] => 'Network 2'
[Date] => '16-Mar-2016'
[Product] => 'Loan Product 1'
[Amount] => 500.00
)
[1] => Array
(
[MSISDN] => 27729234533
[Network] => 'Network 2'
[Date] => '01-Apr-2016'
[Product] => 'Loan Product 1'
[Amount] => 100.00
)
)
)
这就是我想要的
Array
(
['Network 1'] => Array
(
[0] => Array
(
[MSISDN] => 27729554427
[Network] => 'Network 1'
[Date] => '12-Mar-2016'
[Product] => 'Loan Product 1'
[Amount] => 1000.00
)
[1] => Array
(
[MSISDN] => 27725326345
[Network] => 'Network 1'
[Date] => '18-Mar-2016'
[Product] => 'Loan Product 2'
[Amount] => 3000.00
)
)
['Network 1 Aount total'] => 4000.00
['Network 2'] => Array
(
[0] => Array
(
[MSISDN] => 27722342551
[Network] => 'Network 2'
[Date] => '16-Mar-2016'
[Product] => 'Loan Product 1'
[Amount] => 500.00
)
[1] => Array
(
[MSISDN] => 27729234533
[Network] => 'Network 2'
[Date] => '01-Apr-2016'
[Product] => 'Loan Product 1'
[Amount] => 100.00
)
)
['Network 2 Aount total'] => 600.00
)
这是我试过的
function _group_by($array, $key) {
$return = array();
foreach($array as $val) {
$return[$val[$key]][] = $val;
//$return[$val['Amount']] += $val; // this line is failing the one failing
}
echo '<pre>';
print_r($return);
echo '</pre>';
exit();
return $return;
}
答案 0 :(得分:1)
这样做(最简单的一个): -
foreach ($array as $key=>$val){
$amount = array_sum(array_map(function($item) {
return $item['Amount'];
}, $val));
$array[$key.' Amount total'] = $amount;
}
输出: - https://eval.in/728162
答案 1 :(得分:0)
我认为你是以错误的方式做到这一点。要获取数组中的特定列,我们有
array_column($array, $columnname);
功能。因此,使用它来计算总和并显示。
答案 2 :(得分:0)
我没有经过测试,但应该可以使用,或类似的东西
function _group_by($array, $key) {
$return = array();
foreach($array as $key=>$val) {
$return[$key][] = $val;
$total=0;
foreach($val as $product){
$total=$total+$product['Amount'];
}
$return[$key . ' Total Amount']=$total;
}
echo '<pre>';
print_r($return);
echo '</pre>';
exit();
return $return;
}
答案 3 :(得分:0)
检查此功能,
function _group_by($array, $key)
{
foreach ($array as $k => $subArray) {
$temp = 0;
foreach ($subArray as $id => $value) {
$temp += $value['Amount'];
}
$array[$k . 'Aount total'] = $temp;
}
return $array;
}
简单,有效。
答案 4 :(得分:0)
试试这个
foreach ($array as $key=>$val){
$amount = array_sum(array_column($val, 'Amount'));
$array[$key.' Aount total'] = $amount;
}
答案 5 :(得分:-1)
要交付预期的结果(总数紧随每个网络之后),请生成一个新的输出数组变量,并依次迭代网络和网络总数。
代码:(Demo)
foreach ($array as $network => $row) {
$result[$network] = $row;
$result[$network . ' Total Amount'] = array_sum(array_column($row, 'Amount'));
}
var_export($result);
IMO,这是执行该过程的最干净的方法,因为:
array_column()
和array_sum()
是专门为这些任务而设计的。$count
变量即可保持运行总计。