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

如何使用PHP将数组中日期相同的元素分组合并?

嘿,这个需求在PHP开发里挺常见的,我给你两种实用的实现方式,你可以根据自己的习惯和场景来选:

方案一:手动foreach循环分组(直观易调试)

这是最容易理解的方式,逻辑清晰,新手也能快速上手:

// 你的原始数组
$originalArray = [
    ['date' => '2018-03-26', 'person' => 120.00, 'color' => 'Black'],
    ['date' => '2018-03-26', 'person' => 120.00, 'color' => 'Yellow'],
    ['date' => '2018-03-27', 'person' => 120.00, 'color' => 'Red'],
];

$groupedArray = [];

foreach ($originalArray as $item) {
    // 取出当前元素的日期作为分组键
    $date = $item['date'];
    
    // 如果该日期还没在分组数组中,先初始化一个空数组
    if (!isset($groupedArray[$date])) {
        $groupedArray[$date] = [];
    }
    
    // 可选:如果你不想子数组里重复保留date字段,可以先删除它
    // unset($item['date']);
    
    // 将当前元素添加到对应日期的分组里
    $groupedArray[$date][] = $item;
}

// 如果你需要外层是数字索引数组(和你示例的结构一致),执行这一步
$groupedArray = array_values($groupedArray);

// 输出结果看看
print_r($groupedArray);

执行后就能得到你想要的结构:外层是数字索引,每个元素是一个以日期为键的数组,里面包含所有该日期下的原始元素。

方案二:用array_reduce函数实现(简洁函数式风格)

如果喜欢更简洁的写法,可以用PHP的array_reduce函数来完成,代码更紧凑:

$originalArray = [
    ['date' => '2018-03-26', 'person' => 120.00, 'color' => 'Black'],
    ['date' => '2018-03-26', 'person' => 120.00, 'color' => 'Yellow'],
    ['date' => '2018-03-27', 'person' => 120.00, 'color' => 'Red'],
];

$groupedArray = array_reduce($originalArray, function ($carry, $item) {
    $date = $item['date'];
    // 直接将元素追加到对应日期的分组中,无需手动初始化(PHP会自动创建数组)
    $carry[$date][] = $item;
    return $carry;
}, []);

// 同样,转成数字索引外层数组
$groupedArray = array_values($groupedArray);

print_r($groupedArray);

这个方案的原理是通过array_reduce迭代原始数组,逐步累积出分组后的结果,逻辑和foreach是一样的,只是写法更简洁。

两种方案都能实现你的需求,如果你需要调试或者做更多自定义处理,推荐方案一;如果追求代码简洁,方案二更合适。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:42:16