【问题标题】:display dates from an array in json in descending order in php在php中以降序显示json中数组中的日期
【发布时间】:2021-02-11 02:58:50
【问题描述】:

我有一个 JSON 文件,其中有日期,但我想在它们通过 foreach 时按降序对它们进行排序。

{
    "posts": [
        {
            "id": "50",
            "name": "Charlotte Johnson",
            "date": "2021-02-08 10:15:38"
        },
        {
            "id": "51",
            "name": "Emma Jones",
            "date": "2021-02-09 18:30:38"
        },
        {
            "id": "52",
            "name": "Benjamin Miller",
            "date": "2021-02-10 23:47:38"
        }
    ]
}

我遍历 JSON 文件中的数据。 我使用了 usort,但日期仍然没有显示降序。

<?php
    $datajson = json_decode(file_get_contents("results.json"));

    usort($datajson->posts, function($a, $b) {
       return strtotime($a->date) - strtotime($b->date);
    });

    foreach($datajson->posts as $row)
        {
            $date = date('Y-m-d H:i:s', strtotime($row->date));
            echo " Date: ". $date ."<br />";
        }
?>

PHP 显示的日期

Date: 2021-02-08 10:15:38
Date: 2021-02-09 18:30:38
Date: 2021-02-10 24:47:38

但我想按降序对它们进行排序并像这样显示它们

Date: 2021-02-10 24:47:38
Date: 2021-02-09 18:30:38
Date: 2021-02-08 10:15:38

你能帮我解决这个问题吗?

【问题讨论】:

  • 对于降序,只需反转回调$b - $a内的参数即可。
  • 另外,不是排序问题,但这似乎不需要$date = date('Y-m-d H:i:s', strtotime($row-&gt;date));
  • 感谢你们两位指出问题所在。我已经从$ date 中删除了该行。

标签: php json


【解决方案1】:

你需要反转函数参数。

usort($datajson->posts, function($a, $b) {
         return strtotime($b->date) - strtotime($a->date) ;
     });

这是结果输出

【讨论】:

  • 谢谢,我已经修改过了。
猜你喜欢
  • 1970-01-01
  • 2018-02-05
  • 1970-01-01
  • 2019-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多