删除前一个月 - PHP Array

Ali*_*ani 3 php arrays

我有一个数组,其中包含有关一个月内完成的所有工作日/工作的信息.一个月可以有多天工作日.所以我的数组看起来像这样(在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)

希望有人能告诉我如何进行.谢谢!

Nic*_*ick 5

您可以在完成循环时检查循环中的时间.然后,您无需担心输入数据是否已排序.

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

在3v4l.org上演示