2014-04-18 133 views
1

我对php和Jsons很新,我试图按日期安排Json的内容。我知道usort()函数,但到目前为止,我一直未能成功使用它。这是JSON:如何按日期排序Json平面?

[{"id":"1","poi_id":"36","date":"1993-05-14","url":"#","p_flag":"0"},{"id":"2","poi_id":"36","date":"2000-05-14","url":"#","p_flag":"0"},{"id":"3","poi_id":"36","date":"1992-05-14","url":"#","p_flag":"0"}] 

我一直试图做的是这样的:

function sortByYear($a, $b) { 
    $dA = new DateTime($a['date']); 
    $dB = new DateTime($b['date']); 

    return $dA->format('y') - $dB->format('y'); 
} 
$data=json_decode($unsorted, true); 
print_r(usort($data, 'sortByYear')); 

回答

3
<?php 
    $unsorted = '[{"id":"1","poi_id":"36","date":"1993-05-14","url":"#","p_flag":"0"},{"id":"2","poi_id":"36","date":"2000-05-14","url":"#","p_flag":"0"},{"id":"3","poi_id":"36","date":"1992-05-14","url":"#","p_flag":"0"}]'; 

function sortByYear($a, $b) { 
    $dA = new DateTime($a['date']); 
    $dB = new DateTime($b['date']); 

    return $dA > $dB; 
} 
$data=json_decode($unsorted, true); 
usort($data, 'sortByYear'); 
print_r($data); 

Demo

的几点:

  1. 您需要按全年排序Y,而不是最后的twp数字y。当你跨越新千年时你有问题。

  2. 我用>作比较。这种方式更清楚。

  3. usort()排序就绪,不返回数组。这意味着您需要在原始阵列上拨打var_dump(),而不是usort()

+0

地狱是啊,谢谢 – yanki

+0

这只能按年份排序吗?我怎样才能得到它考虑的月份和日期,因为结果必须按时间顺序 – yanki

+0

请参阅我的更新代码。 DateTime对象是可比较的,非常棒。 –