php分组统计求和,php – 在foreach中对数组中的项目进行分组和求和

我循环遍历两个存储过程的结果集,根据另一个存储过程中的字段获取结果.

包含结果集的两个数组是$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’].

请注意,这取决于密钥的独特性.例如,如果您允许/使用可能不是这种情况的名称.

标签:php,arrays,foreach

来源: https://codeday.me/bug/20190628/1316396.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值