如何在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)
使用自定义排序功能,就像这样。
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));
你可以提供这个作为一个PHP脚本? –
你一定是在开玩笑..他只是把它交给你! – jcorry
使用ISO(YYYY-MM-DD)格式,而不是 “英语” 的格式,然后只需使用ksort函数让它们按正确的顺序排列。
没有必要删除连字符,ksort会对字符串键进行字母数字比较,而yyyy-mm-dd格式可以很好地工作,因为词法顺序与实际日期顺序相同。
这不是yyy-mm-dd格式,它只有年份和月份,剩余的是ID,以'_'分隔。 –
我只是这样得到这个值,我想从英文格式值中按年份和月份进行排序。 –
它在我看来不是一个链接问题的重复。 OP的数组有YYYY-Month_ID格式,实际上并不是合法的日期。 – anubhava
是的,但为什么他们没有完全验证就关闭了我的问题? –
如何重新打开这个问题?我想得到一个很好的解决方案 –