我有一个数组,其中包含有关一个月内完成的所有工作日/工作的信息.一个月可以有多天工作日.所以我的数组看起来像这样(在JSON中):
{
"id": 1,
"time": "2018-12-16",
"pages_indexed": 1024
},
{
"id": 2,
"time": "2018-12-12",
"something": 1024
},
{
"id": 3,
"time": "2018-12-09",
"something": 7
},
(....)
{
"id": 12,
"time": "2018-11-12",
"something": 7
},
{
"id": 13,
"time": "2018-11-08",
"something": 7
}
Run Code Online (Sandbox Code Playgroud)
然后我尝试了这个:
$expectedArray = [];
foreach ($items as $item) {
$indexKey = substr($item['time'], 0, 7);
$expectedArray[$indexKey] = $item;
}
print_r(json_encode($expectedArray));
Run Code Online (Sandbox Code Playgroud)
问题是结果是它删除了最后一个,而不是第一个日期,并将其添加为键.这是输出:
"2018-12": {
"id": 123456,
"time": "2018-12-09",
"something": 1029
},
"2018-11": {
"id": 123456,
"time": "2018-11-08",
"something": 1032
},
Run Code Online (Sandbox Code Playgroud)
这是同月名单中的第一天.我希望并期望输出为:
"2018-12": {
"id": 123456,
"time": "2018-12-16",
"something": 1029
},
"2018-11": {
"id": 123456,
"time": "2018-11-12",
"something": 1032
},
Run Code Online (Sandbox Code Playgroud)
希望有人能告诉我如何进行.谢谢!
您可以在完成循环时检查循环中的时间.然后,您无需担心输入数据是否已排序.
$expectedArray = [];
foreach ($items as $item) {
$indexKey = substr($item['time'], 0, 7);
if (!isset($expectedArray[$indexKey]) || $expectedArray[$indexKey]['time'] < $item['time'])
$expectedArray[$indexKey] = $item;
}
print_r(json_encode($expectedArray));
Run Code Online (Sandbox Code Playgroud)
输出(适用于您的样本数据):
{"2018-12":
{"id":1,"time":"2018-12-16","pages_indexed":1024},
"2018-11":
{"id":12,"time":"2018-11-12","something":7}
}
Run Code Online (Sandbox Code Playgroud)