在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'
)
);

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

$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密钥必须是唯一的,并且包含该月的所有日期。

感谢你的帮助,让我在这里走上了正确的方向,因为我觉得自己做错了什么。

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

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
)
)