如何基于DAYS共同值合并多维数组中的TIME列?
按DAYS合并多维数组的TIME子数组
问题描述
我有一个代表工作时间表的多维数组,结构如下:
Array ( ..., [1] => Array ( [TIME] => Array ( [0] => Array ( [FROM] => 10:00 [TO] => 20:00 ) ) [DAYS] => Array ( [0] => 5 ) ) [2] => Array ( [TIME] => Array ( [0] => Array ( [FROM] => 22:00 [TO] => 00:00 ) ) [DAYS] => Array ( [0] => 5 ) ) )
希望当DAYS键的值相同时,合并对应的TIME列,得到如下结果:
Array ( ..., [1] => Array ( [TIME] => Array ( [0] => Array ( [FROM] => 10:00 [TO] => 20:00 ) [1] => Array ( [FROM] => 22:00 [TO] => 00:00 ) ) [DAYS] => Array ( [0] => 5 ) ) )
尝试过array_merge()和array_combine()函数,但未能得到预期效果。
解决方案
可以通过遍历数组,按DAYS分组合并TIME子数组,代码示例如下:
// 假设原工作时间表数组为$schedule $mergedSchedule = []; foreach ($schedule as $item) { // 将DAYS数组转为字符串作为唯一分组键,适配多日期场景(如[5,6]) $dayKey = implode(',', $item['DAYS']); if (isset($mergedSchedule[$dayKey])) { // 合并同DAYS下的TIME数组 $mergedSchedule[$dayKey]['TIME'] = array_merge( $mergedSchedule[$dayKey]['TIME'], $item['TIME'] ); } else { // 首次出现该DAYS,直接存入临时数组 $mergedSchedule[$dayKey] = $item; } } // 将关联数组转为索引数组,还原原数组的索引结构 $mergedSchedule = array_values($mergedSchedule);
说明
- 用
implode(',', $item['DAYS'])把DAYS数组转为字符串,确保相同的日期组合生成唯一的分组键,即使DAYS包含多个日期(比如[5,6])也能正确分组。 array_merge()在这里用于合并同分组下的TIME子数组,之前直接使用它无法实现分组合并,是因为没有先按DAYS做分组处理。- 最后用
array_values()将临时的关联数组转为索引数组,和原数组的结构保持一致。
内容的提问来源于stack exchange,提问作者Viacheslav Ravdin
相关产品推荐
相关产品推荐

