有没有办法可以将以下数组按正确的时间顺序排序?
Array
(
[0] => apr
[1] => aug
[2] => dec
[3] => feb
[4] => jan
[5] => jul
[6] => jun
[7] => mar
[8] => may
[9] => nov
[10] => oct
[11] => sep
)
注意数组是这样来的,有时它不会有所有的月份。
function sort_months($item_1, $item_2)
{
$item_1 = strtotime('1 ' . $item_1 . ' 2000');
$item_2 = strtotime('1 ' . $item_2 . ' 2000');
if($item_1 == $item_2)
{
return 0;
}
return $item_1 > $item_2 ? 1 : -1;
}
$arr = array
(
'apr',
'aug',
'dec',
'feb',
'jan',
'jul',
'jun',
'mar',
'may',
'nov',
'oct',
'sep'
);
usort($arr, 'sort_months');
将 usort 与您定义的自定义比较器一起使用。自定义比较器将使用您的代码处理的日期格式,并返回一个大于、小于或等于零的整数,具体取决于传递给它的两个日期的比较方式。
要维护索引关联和任何其他字符串值,请尝试以下代码:
function find_position($needle, $haystack) {
// put here the elements in order
//$defined_order = array('jan', 'fev', 'mar', 'abr', 'mai', 'jun', 'jul', 'ago', 'set', 'out', 'nov', 'dez');
$defined_order = array('jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec');
$needle_order = -1;
foreach($defined_order as $pos => $item) {
if($needle == $item) {
$needle_order = $pos;
break;
}
}
return($needle_order);
}
function order_array($unsorted_arr) {
$key_orders = array();
$not_available = array();
foreach($unsorted_arr as $key => $val) {
if($position = find_position($val, $unsorted_arr)) {
$key_orders[$key] = $position;
} else {
$not_available[$key] = $val;
}
}
asort($key_orders);
$ordered = array();
foreach($key_orders as $key => $posit) {
$ordered[$key] = $unsorted_arr[$key];
}
return($ordered);
// OR
// return(array('ordered'=>$ordered, 'not_available'=>$not_available));
}
$unsorted = array(0 => 'apr', 1 => 'aug', 2 => 'dec', 3 => 'feb', 4 => 'jan', 5 => 'jul', 6 => 'jun', 7 => 'mar', 8 => 'may', 9 => 'nov', 10 => 'oct', 11 => 'sep' );
$sorted = order_array($unsorted);