如何使用PHP对JSON数组进行排序

xto*_*fer 7 php arrays sorting json date

首先,我是一个完全新手,我已经寻找解决方案,但似乎没有做到这一点.

所以我试图按日期排序这个JSON数组,但我真的不知道我应该解决这个问题,任何正确方向的提示都非常感谢!

["info":[
{"id":1, "title":"original title", "name":"john doe", "date":"2010-05-15"}, 
{"id":2, "title":"another title", "name":"foo bar", "date":"2009-04-11"},
...
Run Code Online (Sandbox Code Playgroud)

所以我得到的数据是这样的

$data=file_get_contents('jsondata...');
$d=json_decode($data,true);
Run Code Online (Sandbox Code Playgroud)

我想按日期排序数据,任何想法我应该如何处理这个?是否也可以仅返回年份值?那么产量将是2009年而不是2009-04-11?

提前致谢

Ry-*_*Ry- 15

您可以使用usort和自定义比较功能:

$data = '{"info":[{"id":1, "title":"original title", "name":"john doe", "date":"2010-05-15"}, {"id":2, "title":"another title", "name":"foo bar", "date":"2009-04-11"}]}';

$info = json_decode($data, true)['info'];

usort($info, function ($a, $b) {
    return $a['date'] <=> $b['date'];
});
Run Code Online (Sandbox Code Playgroud)

<=> 适用于字符串,因为当您的日期格式为YYYY-MM-DD时,字符串比较也是日期比较.

然后,要显示条目的年份值,您可以将日期解析为a DateTime并重新格式化:

$date = DateTime::createFromFormat('Y-m-d', $item['date']);
$year = $date->format('Y');
Run Code Online (Sandbox Code Playgroud)

这是一个演示.

  • @xtoffer您应该接受正确答案,这样您就不会感谢他们帮助您的努力,但您也可以帮助像我这样与您有同样问题的人,并尝试找出这里的答案是正确的一!先感谢您! (2认同)

Fra*_*ijk 0

您必须首先将日期转换为可排序的格式。我认为这样strtotime()就可以了。之后您可以使用 输出任何内容strftime()