PHP中如何合并同一时间的设备信息数组并汇总总数?
解决方案:PHP数组按时间分组聚合设备信息
当然可以实现这个需求!这是开发中很常见的数组分组聚合场景,我给你写个直观的代码示例,带你一步步完成:
1. 原始数组定义
首先我们先把你给出的原始数组整理成标准的PHP格式:
$deviceInfo = [ ['time' => '2018-03-28 03:00 PM', 'deviceName' => 'Samsung', 'total' => 1], ['time' => '2018-03-28 03:00 PM', 'deviceName' => 'Sony', 'total' => 1], ['time' => '2018-03-28 03:00 PM', 'deviceName' => 'Apple', 'total' => 1], ['time' => '2018-03-29 03:00 PM', 'deviceName' => 'Samsung', 'total' => 1] ];
2. 分组聚合逻辑
核心思路是用时间作为唯一标识分组,遍历数组时收集同一时间的设备名并累加总数:
// 初始化分组数组,用时间作为键 $groupedData = []; foreach ($deviceInfo as $item) { $currentTime = $item['time']; // 如果当前时间还未创建分组,先初始化结构 if (!isset($groupedData[$currentTime])) { $groupedData[$currentTime] = [ 'time' => $currentTime, 'deviceName' => [], 'total' => 0 ]; } // 将当前设备名加入分组的设备数组 $groupedData[$currentTime]['deviceName'][] = $item['deviceName']; // 累加当前条目的总数 $groupedData[$currentTime]['total'] += $item['total']; } // 将关联数组转为索引数组(和你想要的输出结构一致) $result = array_values($groupedData); // 打印结果验证 print_r($result);
3. 输出结果
运行上面的代码后,$result的结构就是你想要的:
Array ( [0] => Array ( [time] => 2018-03-28 03:00 PM [deviceName] => Array ( [0] => Samsung [1] => Sony [2] => Apple ) [total] => 3 ) [1] => Array ( [time] => 2018-03-29 03:00 PM [deviceName] => Array ( [0] => Samsung ) [total] => 1 ) )
可选优化:设备名去重
如果你的原始数据中可能出现同一时间同一设备多次出现的情况,可以给deviceName数组去重,比如:
// 在遍历结束后,对每个分组的设备数组去重 foreach ($groupedData as &$group) { $group['deviceName'] = array_unique($group['deviceName']); // 如果需要同步调整total为去重后的设备数量,可以改成: // $group['total'] = count($group['deviceName']); } unset($group); // 释放引用
内容的提问来源于stack exchange,提问作者DPS
相关产品推荐
相关产品推荐

