php – 在foreach中对数组中的项目进行分组和求和
发布时间:2020-12-13 16:57:05 所属栏目:PHP教程 来源:网络整理
导读:我循环遍历两个存储过程的结果集,根据另一个存储过程中的字段获取结果. 包含结果集的两个数组是$customers和$subcustomers. foreach($customers as $customer){ foreach($subcustomers as $subcustomer) { if($subcustomer['parent'] == $customer['id']) {
我循环遍历两个存储过程的结果集,根据另一个存储过程中的字段获取结果.
包含结果集的两个数组是$customers和$subcustomers. foreach($customers as $customer) { foreach($subcustomers as $subcustomer) { if($subcustomer['parent'] == $customer['id']) { if($customer['innumber'] == null && $subcustomer['innumber'] != null) { $chartInboundSub['name'] = $customer['name']; $chartInboundSub['label'] = $subcustomer['innumber']; $chartInboundSub['countInbound'] = $customer['count']; $chartInboundSub['minsInbound'] = ceil($customer['duration'] / 60); $chartInboundSub['customerid'] = $customer['id']; array_push($out['chartInbound'],$chartInboundSub); } } } } print_r的当前输出($out [‘chartInbound’])如下: Array ( [0] => Array ( [countInbound] => 426 [minsInbound] => 340 [name] => Telekomm [label] => 01-02 [customerid] => 6 ) [1] => Array ( [countInbound] => 1 [minsInbound] => 2 [name] => Telekomm [label] => 01-02 [customerid] => 6 ) [2] => Array ( [countInbound] => 3 [minsInbound] => 21 [name] => Telekomm [label] => 080 [customerid] => 6 ) [3] => Array ( [countInbound] => 1920 [minsInbound] => 15766 [name] => Telekomm [label] => 084 [customerid] => 6 ) [4] => Array ( [countInbound] => 2332 [minsInbound] => 17521 [name] => Telekomm [label] => 084 [customerid] => 6 ) ... ) 上述结果需要按名称,标签,customerid与countInbound和minsInbound求和进行分组,因此: 期望的输出应该是: Array ( [0] => Array ( [countInbound] => 427 [minsInbound] => 342 [name] => Telekomm [label] => 01-02 [customerid] => 6 ) [1] => Array ( [countInbound] => 3 [minsInbound] => 21 [name] => Telekomm [label] => 080 [customerid] => 6 ) [2] => Array ( [countInbound] => 4252 [minsInbound] => 33287 [name] => Telekomm [label] => 084 [customerid] => 6 ) ... ) 解决方法
我认为这应该有效.我没有测试过代码,所以我没有做出任何承诺.
$map = array(); $i = 0; foreach($customers as $customer) { foreach($subcustomers as $subcustomer) { if($subcustomer['parent'] == $customer['id']) { if($customer['innumber'] == null && $subcustomer['innumber'] != null) { $key = $customer['name'] . '/' . $subcustomer['innumber'] . '/' . $customer['id']; if(isset($map[$key])) { $out['chartInbound'][$map[$key]]['countInbound'] += $customer['count']; $out['chartInbound'][$map[$key]]['minsInbound'] += ceil($customer['duration'] / 60); } else { $out['chartInbound'][$i] = array( 'name' => $customer['name'],'label' => $subcustomer['innumber'],'countInbound' => $customer['count'],'minsInbound' => ceil($customer['duration'] / 60),'customerid' => $customer['id'],); $map[$key] = $i++; } } } } } 对于name,label和customerid的每个组合,它会创建一个字符串键,该键对于该组合??必须是唯一的.然后它检查是否已存在该密钥的任何数据(通过在$out [‘chartInbound’]中保留单独的密钥及其索引列表).如果是这样,它只会添加countInbound和minsInbound.如果没有,它将整个$chartInboundSub放入$out [‘chartInbound’]. 请注意,这取决于密钥的独特性.例如,如果您允许/使用可能不是这种情况的名称. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |