You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 14:15:03