2010-07-31 52 views
0

是否有我可以將下列數組排序到正確的順序?排序存儲在一個字符串中的日期數組

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 
) 

注意的陣列來我這個樣子,有時它不會有所有月份。

顯然我想按照時間順序。

感謝

+0

你總是有幾個月,在這種格式? – NullUserException 2010-07-31 13:17:23

+0

是的,月份總是這種格式,每次只是一個不同的順序 – Lizard 2010-07-31 13:18:57

回答

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

使用usort與您定義自定義比較一起。自定義比較器將使用您的代碼處理的日期格式,並根據傳遞給它的兩個日期的比較結果返回大於,小於或等於零的整數。

1

要十個分量索引關係和其他任何字符串值,波紋管試試代碼:

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); 
相關問題