2011-12-02 34 views
1

可能重複:
How to sort a date array in PHP如何在PHP中按年份和月份排序值的數組?

我想理清按年份和月份值的數組,我已經把它貼在這裏我的代碼, 年是在爲降序排序我劇本,我想升序進行梳理一年,

<?php 
$array = array("2011-September_38","2011-June_4","2010-November_9","2011-November_29","2010-December_19"); 
function monthCompare($a, $b) { 
$count = substr($a,strpos($a,'_')); 
$count =strlen($count); 
$count1 = substr($b,strpos($b,'_')); 
$count1 =strlen($count1); 
    $a = strtolower(substr($a,5,-$count)); 
    $b = strtolower(substr($b,5,-$count1)); 


$months = array(
     'january'=> 1, 
     'february'=> 2, 
     'march'=>3, 
     'april'=>4, 
     'may'=>5, 
     'june'=>6, 
     'july'=>7, 
     'august'=>8, 
     'september'=>9, 
     'october'=>10, 
     'november'=>11, 
     'december'=>12 
    ); 
     if($a == $b) 
      return 0; 
     if(!isset($months[$a]) || !isset($months[$b])) 
      return $a > $b; 
     return ($months[$a] > $months[$b]) ? 1 : -1; 
    } 
    usort($array, "monthCompare"); 
    print_r($array); 
    ?> 

實際輸出:

Array 
(
    [0] => 2011-June_4 
    [1] => 2010-Marh_19 
    [2] => 2011-September_38 
    [3] => 2010-November_9 
    [4] => 2011-November_29 
) 

需要的輸出:

Array ([0] => 2010-Marh_19 
     [1] => 2010-November_9 
     [2] => 2011-June_4 
     [3] => 2011-September_38 
     [4] => 2011-November_29) 
+0

它在我看來不是一個鏈接問題的重複。 OP的數組有YYYY-Month_ID格式,實際上並不是合法的日期。 – anubhava

+0

是的,但爲什麼他們沒有完全驗證就關閉了我的問題? –

+0

如何重新打開這個問題?我想得到一個很好的解決方案 –

回答

1

使用自定義排序功能,就像這樣。

var months = new Array(12); 
months['Jan'] = 1; 
months['Feb'] = 2; 
months['Mar'] = 3; 
months['Apr'] = 4; 
months['May'] = 5; 
months['Jun'] = 6; 
months['Jul'] = 7; 
months['Aug'] = 8; 
months['Sep'] = 9; 
months['Oct'] = 10; 
months['Nov'] = 11; 
months['Dec'] = 12; 

function sortDate(a,b) 
    { 
var m1 = a.substring(0,3); 
var y1 = a.substring(4); 
var m2 = b.substring(0,3); 
var y2 = b.substring(4);  

if(Number(y1)>Number(y2)) { 
    return 1; 
} else if(Number(y1)<Number(y2)) { 
    return -1; 
} else { 
    if(months[m1]>months[m2]) { 
     return 1; 
    } else if(months[m1]<months[m2]) { 
     return -1; 
    } 
} 

return 0; 
    } 

var myArray = ['Oct/08', 'Jan/09', 'Mar/09', 'May/07', 'Apr/08', 'Dec/06']; 
alert(myArray.sort(sortDate)); 
+0

你可以提供這個作爲一個PHP腳本? –

+0

你一定是在開玩笑..他只是把它交給你! – jcorry

0

You can Check This Link: -

使用ISO(YYYY-MM-DD)格式,而不是 「英語」 的格式,然後只需使用ksort函數讓它們按正確的順序排列。

沒有必要刪除連字符,ksort會對字符串鍵進行字母數字比較,而yyyy-mm-dd格式可以很好地工作,因爲詞法順序與實際日期順序相同。

+0

這不是yyy-mm-dd格式,它只有年份和月份,剩餘的是ID,以'_'分隔。 –

+0

我只是這樣得到這個值,我想從英文格式值中按年份和月份進行排序。 –