代码之家  ›  专栏  ›  技术社区  ›  Lizard

排序字符串中存储的日期数组

  •  0
  • Lizard  · 技术社区  · 14 年前

    有没有办法把下面的数组按正确的顺序排序?

    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
    )
    

    显然我想按时间顺序。

    谢谢

    3 回复  |  直到 14 年前
        1
  •  4
  •   Tim Cooper    14 年前
    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');
    
        2
  •  1
  •   AbdullahC    14 年前

    使用 usort 以及您定义的自定义比较器。自定义比较器将使用代码处理的日期格式,并返回一个大于、小于或等于零的整数,具体取决于传递给它的两个日期的比较方式。

        3
  •  1
  •   Resegue    14 年前

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

    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);
    
    推荐文章