如何在PHP中按年份和月份排序值的数组?

问题描述:

可能重复:
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

如何重新打开这个问题?我想得到一个很好的解决方案 –

使用自定义排序功能,就像这样。

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

You can Check This Link: -

使用ISO(YYYY-MM-DD)格式,而不是 “英语” 的格式,然后只需使用ksort函数让它们按正确的顺序排列。

没有必要删除连字符,ksort会对字符串键进行字母数字比较,而yyyy-mm-dd格式可以很好地工作,因为词法顺序与实际日期顺序相同。

+0

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

+0

我只是这样得到这个值,我想从英文格式值中按年份和月份进行排序。 –