首页 > 解决方案 > 在 PHP 中创建关联多维数组

问题描述

我正在尝试创建一个数组,其中 Month 是键,每个键都包含一个或多个日期。我从一个看起来像下面的 $arr 的数组开始。旁注:我不控制原始数组的结构,因为它来自 API。我只是添加了下面的 $arr 来说明并使人们更容易理解和调试。

$arr = array(
    0 => array(
        'date' => '2020-12-07'
    ),
    1 => array(
        'date' => '2020-12-19'
    ),
    2 => array(
        'date' => '2021-01-03'
    ),
    3 => array(
        'date' => '2020-01-18'
    )
);

因为我需要以不同的方式显示日期,所以我需要构造一个包含月份名称和格式化日期的数组:

$sorted = array(); // This is the array I will return later.
foreach ( $arr as $day ) {
    setlocale(LC_TIME, 'sv_SE');
    $month          = strftime( '%B',   strtotime( $day['date'] ) );
    $display_date   = trim( strftime( '%e %b', strtotime( $day['date'] ) ) );
}

到目前为止,我在这里尝试做的一切都失败了。老实说,我什至不记得所有的方法。我最后一次尝试的是这个(在 foreach() 中):

array_push($sorted, array(
    $month => $display_date
));

其中的 var_dump() 生成了一个枚举数组:

    array (size=4)
    0 => 
        array (size=1)
        'December' => string '7 Dec' (length=5)
    1 => 
        array (size=1)
        'December' => string '19 Dec' (length=6)
    2 => 
        array (size=1)
        'Januari' => string '3 Jan' (length=5)
    3 => 
        array (size=1)
        'Januari' => string '18 Jan' (length=6)

我想要实现的是:

所有$display_date的都应该在它的$month关键之下。键必须是唯一的并且包含该$month月的所有日期。

感谢任何帮助让我在这里找到正确的方向,因为我觉得我在做一些根本错误的事情。

标签: phparrayssorting

解决方案


您将在每个循环中添加带有月份和日期的新数组,替换array_push()$sorted[$month][] = $display_date;

foreach ( $arr as $day ) {
    setlocale(LC_TIME, 'sv_SE');
    $month          = strftime( '%B',   strtotime( $day['date'] ) );
    $display_date   = trim( strftime( '%e %b', strtotime( $day['date'] ) ) );

    $sorted[$month][] = $display_date;
}

print_r($sorted);

输出:

Array
(
    [december] => Array
        (
            [0] => 7 dec
            [1] => 19 dec
        )

    [januari] => Array
        (
            [0] => 3 jan
            [1] => 18 jan
        )

)

推荐阅读