PHP按EMI期限对嵌套循环生成的投资者数组分组求和
按EMI期限对投资者EMI数据分组求和
我通过以下PHP代码生成了一个investors数组,存储了多位投资者的多期EMI数据。现在需要按EMI期限对数组进行分组求和,生成示例所示的结果数组。
原始生成数组的代码
$investors = array(); for($i = 0; $i < 2 ; $i++){ // 存入EMI数据开始 $emiTenures = array(); for($k = 0; $k < 3 ; $k++){ $data =[ 'b_amount' => 1*$k+$i, 'recv_total' => 1+$k+$i ]; array_push($emiTenures,$data); } // 存入EMI数据结束 array_push($investors,$emiTenures); } print_r($investors);
原始数组输出
Array ( [0] => Array ( [0] => Array ( [b_amount] => 0 [recv_total] => 1 ) [1] => Array ( [b_amount] => 1 [recv_total] => 2 ) [2] => Array ( [b_amount] => 2 [recv_total] => 3 ) ) [1] => Array ( [0] => Array ( [b_amount] => 1 [recv_total] => 2 ) [1] => Array ( [b_amount] => 2 [recv_total] => 3 ) [2] => Array ( [b_amount] => 3 [recv_total] => 4 ) ) )
预期分组求和结果
Array ( [0] => Array ( [b_amount] => 1 // $investors[0][0]['b_amount'] + $investors[1][0]['b_amount'] [recv_total] => 3 // $investors[0][0]['recv_total'] + $investors[1][0]['recv_total'] ) [1] => Array ( [b_amount] => 3 // $investors[0][1]['b_amount'] + $investors[1][1]['b_amount'] [recv_total] => 5 // $investors[0][1]['recv_total'] + $investors[1][1]['recv_total'] ) [2] => Array ( [b_amount] => 5 [recv_total] => 7 ) )
实现代码
通过遍历投资者数组,按EMI期限的索引位置进行字段累加,即可得到目标结果:
// 初始化结果数组 $result = []; foreach ($investors as $investorEmi) { foreach ($investorEmi as $index => $emiData) { // 初始化当前期限的求和项(如果未存在) if (!isset($result[$index])) { $result[$index] = [ 'b_amount' => 0, 'recv_total' => 0 ]; } // 累加对应字段值 $result[$index]['b_amount'] += $emiData['b_amount']; $result[$index]['recv_total'] += $emiData['recv_total']; } } print_r($result);
逻辑说明
- 先初始化空的结果数组
$result; - 外层遍历每位投资者的EMI数据数组;
- 内层遍历该投资者的每一期EMI数据,以期限的索引(
$index)作为分组依据; - 若结果数组中当前索引的记录未初始化,则先创建初始值为0的结构;
- 分别累加
b_amount和recv_total字段的值; - 最终输出的
$result即为按EMI期限分组求和后的数组。
内容的提问来源于stack exchange,提问作者MD IRFAN ALI
相关产品推荐
相关产品推荐

