PHP循环中将相同日期值的时间段合并到同一数组的实现问题
解决方案
你可以以日期day为临时索引做分组处理,循环时先判断当天记录是否已存在,存在则追加时间段,不存在则初始化记录,代码如下:
$items = []; foreach($settings as $setting){ $currentDay = $setting->day; // 当天无记录时初始化结构 if(!isset($items[$currentDay])){ $items[$currentDay] = [ 'day' => $currentDay, 'periods' => [] ]; } // 追加当前时间段到对应天的periods数组 $items[$currentDay]['periods'][] = [ 'start' => $setting->start, 'end' => $setting->end ]; } // 可选:如果需要将数组转为连续数字索引,新增下面这行代码 $items = array_values($items);
逻辑说明
- 用
day作为临时键,可以快速定位到同一天的记录,避免重复生成同一天的顶层数组项 - 首次遇到某一天的记录时,先初始化
day字段和空的periods数组 - 每次循环都把当前时间段追加到对应天的
periods数组中,就能实现同一天的多个时间段聚合 - 加
array_values处理是为了把以day为键的关联数组转为索引数组,完全匹配你期望的输出结构。
内容的提问来源于stack exchange,提问作者Davis
相关产品推荐
相关产品推荐

