2014-04-18 162 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對象是可比較的,非常棒。 –