$array = array("2011-September_38","2011-June_4","2010-November_9","2011-November_29","2010-December_19");
Я хочу отсортировать строки массива следующим образом: сначала он должен сортировать год, затем должен сортировать месяц,
ЖЕЛАТЕЛЬНЫЙ ВЫХОД
Array ( [0] => 2010-Marh_19 [1] => 2010-November_9 [2] => 2011-June_4 [3] => 2011-September_38 [4] => 2011-November_29 )
Я пробовал что-то, может ли кто-нибудь связать мою функцию, чтобы сортировать год, а затем месяц http://codepad.org/skEiUkTC
Попробуйте этот код:
<?php $array = array("2011-September_38","2011-June_4","2010-November_9","2011-November_29","2010-December_19"); function monthCompare($a, $b) { $da = strtotime(strstr($a, '_', true)); $db = strtotime(strstr($b, '_', true)); return $da > $db; } usort($array, "monthCompare"); print_r($array); ?>
ВЫВОД
Array ( [0] => 2010-November_9 [1] => 2010-December_19 [2] => 2011-June_4 [3] => 2011-September_38 [4] => 2011-November_29 )
Поэтому простое решение состоит в том, чтобы превратить каждое из значений в объекты с помощью DateTime :: createFromFormat , отсортировать их и затем снова вывести значения.
Прежде чем я увидел этот вопрос, я никогда не играл с объектами DateTime, но они потрясающие и удобные в работе, и createFromFormat
имеет смысл.
$array = array("2011-September_30","2011-June_4","2010-November_9","2011-November_29","2010-December_19"); foreach($array as $item) { $timestamps[] = DateTime::createFromFormat('Y-F_d',$item); } sort($timestamps); foreach($timestamps as $timestamp) { $newarray[] = $timestamp->format('Y-F_d'); }
дам тебе
Array ( [0] => 2010-November_09 [1] => 2010-December_19 [2] => 2011-June_04 [3] => 2011-September_30 [4] => 2011-November_29 )