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

如何将索引数组转为以日期为键的关联数组并循环遍历子数组

解决方案:将索引数组转换为以日期为键的关联数组

没问题,我来帮你搞定这个数组转换的需求,同时给你讲清楚遍历的方法~

首先先把你提供的原数组用PHP代码清晰表示出来:

$originalArray = [
    ['start_date' => '2018-03-27', 'start_time' => '10:00:00'],
    ['start_date' => '2018-03-28', 'start_time' => '11:00:00'],
    ['start_date' => '2018-03-28', 'start_time' => '12:00:00'],
];

方法一:用foreach循环实现转换(最直观易懂)

这也是你提到的通过循环遍历数组的方式,核心思路是遍历原数组的每个子元素,将相同start_date的元素归到同一个键下:

// 初始化目标空数组
$targetArray = [];

foreach ($originalArray as $item) {
    // 取出当前子元素的日期作为键
    $dateKey = $item['start_date'];
    
    // 如果目标数组中还没有这个日期键,先初始化一个空数组
    if (!isset($targetArray[$dateKey])) {
        $targetArray[$dateKey] = [];
    }
    
    // 将当前子元素追加到对应日期的数组中
    $targetArray[$dateKey][] = $item;
}

转换完成后,$targetArray的结构就和你期望的一致了:

Array
(
    [2018-03-27] => Array
        (
            [0] => Array
                (
                    [start_date] => 2018-03-27
                    [start_time] => 10:00:00
                )

        )

    [2018-03-28] => Array
        (
            [0] => Array
                (
                    [start_date] => 2018-03-28
                    [start_time] => 11:00:00
                )

            [1] => Array
                (
                    [start_date] => 2018-03-28
                    [start_time] => 12:00:00
                )

        )

)

如果你的需求是只保留start_time而不是整个子数组,只需要把代码里的$targetArray[$dateKey][] = $item;改成$targetArray[$dateKey][] = $item['start_time'];即可。

方法二:用array_reduce实现更简洁的转换

如果你喜欢更简洁的写法,可以用PHP的array_reduce函数来实现,效果和foreach完全一样:

$targetArray = array_reduce($originalArray, function($carry, $item) {
    $dateKey = $item['start_date'];
    $carry[$dateKey][] = $item;
    return $carry;
}, []);

遍历转换后的数组获取子数组

转换完成后,如果你想遍历目标数组拿到每个日期下的子数组,可以用嵌套foreach:

foreach ($targetArray as $date => $subArrays) {
    echo "日期:{$date}\n";
    foreach ($subArrays as $index => $subItem) {
        echo "  第{$index+1}个子项:开始时间 {$subItem['start_time']}\n";
    }
}

这段代码的输出会是:

日期:2018-03-27
  第1个子项:开始时间 10:00:00
日期:2018-03-28
  第1个子项:开始时间 11:00:00
  第2个子项:开始时间 12:00:00

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:06:02