Pon*_*ade 2 php arrays sum multidimensional-array
问题:找到每个'id'的'subtotal'中值的总和,并将每个id的相应总和存储在一个数组(或变量)中.
我现在的草率解决方案是运行一个带有多个if语句的foreach来计算出现次数.这对于像5个ID这样的东西是足够的,但是我必须在38个以上迭代它.如果可能的话,我想将结果按顺序存储在数组中.
我怎样才能提高效率?任何和所有帮助将不胜感激.(看到我最后的草率解决方案,以获得良好的笑声)
期望的结果:
操作的数组代码
$someArray = array(
array(
'id'=> 1,
'subtotal'=> 5),
array(
'id'=> 1,
'subtotal'=> 5),
array(
'id'=> 2,
'subtotal'=> 6),
array(
'id'=> 2,
'subtotal'=> 6),
array(
'id'=> 2,
'subtotal'=> 6),
array(
'id'=> 3,
'subtotal'=> 7),
array(
'id'=> 3,
'subtotal'=> 7),
array(
'id'=> 4,
'subtotal'=> 2),
array(
'id'=> 4,
'subtotal'=> 2),
array(
'id'=> 5,
'subtotal'=> 3),
);
Run Code Online (Sandbox Code Playgroud)
邋Solution的解决方案
$sum_id_1 = 0;
$sum_id_2 = 0;
$sum_id_3 = 0;
$sum_id_4 = 0;
$sum_id_5 = 0;
foreach ($someArray as $k) {
if ($k['id'] == 1) {
$sum_id_1 += $k['subtotal'];
}
if ($k['id'] == 2) {
$sum_id_2 += $k['subtotal'];
}
if ($k['id'] == 3) {
$sum_id_3 += $k['subtotal'];
}
if ($k['id'] == 4) {
$sum_id_4 += $k['subtotal'];
}
if ($k['id'] == 5) {
$sum_id_5 += $k['subtotal'];
}
}
Run Code Online (Sandbox Code Playgroud)
邋Solution的解决方案输出(在回声上)
$sum = array_reduce($someArray, function($result, $item) {
if (!isset($result[$item['id']])) $result[$item['id']] = 0;
$result[$item['id']] += $item['subtotal'];
return $result;
}, array());
var_dump($sum); // array(5) { [1]=> int(10) [2]=> int(18) [3]=> int(14) [4]=> int(4) [5]=> int(3) }
Run Code Online (Sandbox Code Playgroud)
对于PHP <= 5.3,手动执行循环计数:
$sum = array();
foreach ($someArray as $item) {
if (!isset($sum[$item['id']])) $sum[$item['id']] = 0;
$sum[$item['id']] += $item['subtotal'];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6099 次 |
| 最近记录: |