2015-06-04 49 views
0

其實我有一個數組,我需要根據日期明智地排序它,但不幸的是它對我來說變得困難。你能幫助我嗎?排序數組如果在零索引處給出日期明智的鍵

我有這樣的一個數組在下面

  $data = array ( 
      array('July 2015', 2 , 5, 0, ''), 
      array('September 2015', 2 , 5, 0, ''), 
      array('August 2015', 2 , 5, 0, ''), 
      array('March 2017', 2 , 5, 0, ''), 
      array('December 2015', 2 , 5, 0, ''), 
      array('March 2016', 2 , 5, 0, ''), 
     ); 

現在我想根據從最小的日期開始大日期,如日期明智這個數組排序,它會變成這樣。

  $data = array ( 
      array('July 2015', 2 , 5, 0, ''), 
      array('August 2015', 2 , 5, 0, ''), 
      array('September 2015', 2 , 5, 0, ''), 
      array('December 2015', 2 , 5, 0, ''), 
      array('March 2016', 2 , 5, 0, ''), 
      array('March 2017', 2 , 5, 0, ''), 
     ); 

任何人都可以幫助我。

任何幫助將不勝感激。

感謝

+0

你有沒有嘗試過實現這個目標? –

+0

從這裏開始:http://stackoverflow.com/q/17364127/476。這會將這個問題簡化爲更具體的「如何比較兩個字符串,如'2015年7月'?」 – deceze

回答

1
$data = array(
    array('July 2015', 2, 5, 0, ''), 
    array('September 2015', 2, 5, 0, ''), 
    array('August 2015', 2, 5, 0, ''), 
    array('March 2017', 2, 5, 0, ''), 
    array('December 2015', 2, 5, 0, ''), 
    array('March 2016', 2, 5, 0, ''), 
); 

uasort($data, function($a,$b){ 
    if(strtotime($a[0]) == strtotime($b[0])) 
    { 
     return 0; 
    } 
    return strtotime($a[0]) < strtotime($b[0]) ? -1 : 1; 
}); 

print_r($data); 

或者最簡單的方式DECEZE

uasort($data, function($a,$b){ 
    return strtotime($a[0]) - strtotime($b[0]); 
}); 

DEMO

DEMO SUGGESTED BY DECEZE

+1

提示:'返回strtotime($ a [0]) - strtotime($ b [0]);' – deceze

+0

謝謝@deceze永遠不會知道那一個。非常感謝 –

+0

我已經更新了我的答案@deceze。再次感謝 –

1

使用usort功能和使用的strtotime字符串日期轉換爲時間戳:

usort($data, function ($a, $b) { 
    $aTime = strtotime($a[0]); 
    $bTime = strtotime($b[0]); 

    if ($aTime == $bTime) 
     return 0; 

    return $aTime > $bTime ? 1 : -1; 
}); 
+0

謝謝你的幫助 –

+0

沒有問題。祝你的項目好運。順便說一句,@Uchiha建議的方法除了保持索引關聯之外是相似的。 – MaGnetas