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

阅读: 评论:0

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

本文发布于:2023-05-05 22:02:21,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/3/88876.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:密钥   结果   没有   过程   创建
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图