php - 在 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
月的所有日期。
感谢任何帮助让我在这里找到正确的方向,因为我觉得我在做一些根本错误的事情。
解决方案
您将在每个循环中添加带有月份和日期的新数组,替换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
)
)
推荐阅读
- javascript - 从“装饰”数组中删除命名属性
- imap - 请求所有 Google IMAP IP 子网
- python - 使用python3读取二进制文件
- go - 如何“将 Go 指针传递给 Cgo”?
- c# - 将 Excel 转换为 JSON
- c++ - 如何为程序的每次运行创建一个存储不同数据类型的向量?
- python - 从 pandas 数据框的所有列中的列表中删除 nans(pythonic 方式)
- c# - 必须在 Windows 7 中为 msi 提示 UAC
- python-3.x - 为什么CNN只预测一类
- asp.net-mvc - 从 Visual Studio 获取完整的源代码以获得许可