2016-01-07 3 views
0
года

Это мой массив:PHP - массив сортировать по месяцам и

$ar = array( 
'Jan-2016' => 1, 
'Feb-2016' => 2, 
'Mar-2016' => 3, 
'Apr-2016' => 4, 
'May-2016' => 4, 
'Jun-2016' => 4, 
'Jul-2016' => 4, 
'Aug-2016' => 4, 
'Sep-2016' => 4, 
'Oct-2016' => 4, 
'Nov-2016' => 4, 
'Dec-2016' => 4, 
'Jan-2015' => 1, 
'Mar-2015' => 1); 

Я хочу, чтобы отсортировать этот массив в месяце & года. Я пробовал под кодом:

ksort($ar); 

Но я не могу получить результат, как я ожидал.

мне нужен результат, как показано ниже массива:

$ar = array(
'Jan-2015' => 1, 
'Mar-2015' => 1, 
'Jan-2016' => 1, 
'Feb-2016' => 2, 
'Mar-2016' => 3, 
'Apr-2016' => 4, 
'May-2016' => 4, 
'Jun-2016' => 4, 
'Jul-2016' => 4, 
'Aug-2016' => 4, 
'Sep-2016' => 4, 
'Oct-2016' => 4, 
'Nov-2016' => 4, 
'Dec-2016' => 4); 
+0

'uksort' ваш вариант –

+0

http://php.net/manual/en/function.uksort.php - Сортировка массива по ключам с использованием пользовательского comp функция arison. – PaulRoth

+0

Можете ли вы предоставить код? – Guru

ответ

5

uksort является правильной функции использования:

uksort($ar, function($a1, $a2) { 
     $time1 = strtotime($a1); 
     $time2 = strtotime($a2); 

     return $time1 - $time2; 
    }); 

print_r($ar); 
+0

'return $ time1 - $ time2' намного проще. –

+0

@u_mulder хорошо не сильно меняется, но вы правы –

+0

@okio Super .. Большое спасибо .. – Guru

0

Дополнение: сортировку

$sortOrder = true; // ASC 
$sortOrder = false; // DESC 

uksort($array, function($a, $b) use($sortOrder) { 
    $timeA = strtotime($a); 
    $timeB = strtotime($b); 

    return $sortOrder ? ($timeA - $timeB) : ($timeB - $timeA); 
}); 
Смежные вопросы