2011-12-02 3 views
1

可能性の重複:
How to sort a date array in PHPPHPで年と月の値の配列をどのようにソートできますか?

私は年と月によって値の配列をソートしたい、私は 年は私の中で降順にソートされ、ここに私のコードを添付しましたスクリプト、私は、昇順で年を整理したい

<?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

私はこの値をこのようにしています。英語と英語の値から年月を並べ替えたい。 –

関連する問題