Php 对存储在字符串中的日期数组进行排序

Php 对存储在字符串中的日期数组进行排序,php,arrays,sorting,date-sorting,Php,Arrays,Sorting,Date Sorting,我是否可以将以下数组按正确顺序排序 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 ) 注意,

我是否可以将以下数组按正确顺序排序

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');
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);

要保存索引关联和任何其他字符串值,请尝试以下代码:

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);

你总是只有几个月,而且是这种格式吗?是的,每个月都是这种格式,只是每次的顺序不同。你总是只有个月,并且是这种格式吗?是的,每个月都是这种格式,只是每次的顺序不同