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

求助:PHP如何按日期值合并数组

按date值合并PHP数组的解决方案

array_merge()无法直接实现按date分组合并的需求——它仅做数组的简单合并,不会根据特定键分组,且重复键名会被覆盖。以下是两种可行的实现方案:

方案1:保留原带数字后缀的键名(匹配你期望的格式逻辑)

该方案将相同date的项合并到同一数组中,保留原始的enterN/exitN/groupN键名:

$original = [
    ['date' => 14, 'enter1' => '2024-01-14 15:46:58', 'exit1' => '2024-01-14 19:46:58', 'group1' => 2],
    ['date' => 15, 'enter1' => '2024-01-15 15:47:58', 'exit1' => '2024-01-15 15:51:11', 'group1' => 1],
    ['date' => 15, 'enter2' => '2024-01-15 18:11:33', 'exit2' => '2024-01-15 19:11:33', 'group2' => 2],
    ['date' => 15, 'enter3' => '2024-01-15 15:48:22', 'exit3' => '2024-01-15 17:25:43', 'group3' => 3],
];

$merged = [];

foreach ($original as $item) {
    $date = $item['date'];
    unset($item['date']); // 移除date键,仅保留业务字段
    
    if (!isset($merged[$date])) {
        // 首次遇到该date,初始化数组并保留date字段
        $merged[$date] = ['date' => $date];
    }
    
    // 合并当前项的字段到对应date的数组中
    $merged[$date] = array_merge($merged[$date], $item);
}

// 将关联数组转为索引数组,符合目标格式
$merged = array_values($merged);

// 输出结果
echo '<pre>';
print_r($merged);
echo '</pre>';

运行结果:

Array
(
    [0] => Array
        (
            [date] => 14
            [enter1] => 2024-01-14 15:46:58
            [exit1] => 2024-01-14 19:46:58
            [group1] => 2
        )

    [1] => Array
        (
            [date] => 15
            [enter1] => 2024-01-15 15:47:58
            [exit1] => 2024-01-15 15:51:11
            [group1] => 1
            [enter2] => 2024-01-15 18:11:33
            [exit2] => 2024-01-15 19:11:33
            [group2] => 2
            [enter3] => 2024-01-15 15:48:22
            [exit3] => 2024-01-15 17:25:43
            [group3] => 3
        )

)

方案2:解决键名冲突(更推荐的结构化方案)

PHP数组不允许重复键名,你期望的结构中多个group键会被覆盖。该方案将每组数据转为子数组,结构更清晰,便于后续业务处理:

$original = [
    ['date' => 14, 'enter1' => '2024-01-14 15:46:58', 'exit1' => '2024-01-14 19:46:58', 'group1' => 2],
    ['date' => 15, 'enter1' => '2024-01-15 15:47:58', 'exit1' => '2024-01-15 15:51:11', 'group1' => 1],
    ['date' => 15, 'enter2' => '2024-01-15 18:11:33', 'exit2' => '2024-01-15 19:11:33', 'group2' => 2],
    ['date' => 15, 'enter3' => '2024-01-15 15:48:22', 'exit3' => '2024-01-15 17:25:43', 'group3' => 3],
];

$merged = [];

foreach ($original as $item) {
    $date = $item['date'];
    unset($item['date']);
    
    // 提取键名的基础部分(去掉末尾数字),统一字段名
    $groupData = [];
    foreach ($item as $key => $value) {
        $baseKey = preg_replace('/\d+$/', '', $key);
        $groupData[$baseKey] = $value;
    }
    
    if (!isset($merged[$date])) {
        $merged[$date] = [
            'date' => $date,
            'groups' => []
        ];
    }
    
    $merged[$date]['groups'][] = $groupData;
}

$merged = array_values($merged);

// 输出结果
echo '<pre>';
print_r($merged);
echo '</pre>';

运行结果:

Array
(
    [0] => Array
        (
            [date] => 14
            [groups] => Array
                (
                    [0] => Array
                        (
                            [enter] => 2024-01-14 15:46:58
                            [exit] => 2024-01-14 19:46:58
                            [group] => 2
                        )

                )

        )

    [1] => Array
        (
            [date] => 15
            [groups] => Array
                (
                    [0] => Array
                        (
                            [enter] => 2024-01-15 15:47:58
                            [exit] => 2024-01-15 15:51:11
                            [group] => 1
                        )

                    [1] => Array
                        (
                            [enter] => 2024-01-15 18:11:33
                            [exit] => 2024-01-15 19:11:33
                            [group] => 2
                        )

                    [2] => Array
                        (
                            [enter] => 2024-01-15 15:48:22
                            [exit] => 2024-01-15 17:25:43
                            [group] => 3
                        )

                )

        )

)

内容的提问来源于stack exchange,提问作者GT80

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 03:25:01