На основании ответа @ preinheimer, вот версия, которая будет выполнять последовательную сортировку, если имя не существует:
$data = array("Apr", "Mar", "Jan", "Feb", "ddd", "aaa", "ccc");
function monthCompare($a, $b) {
$a = strtolower($a);
$b = strtolower($b);
$months = array(
'jan' => 1,
'feb' => 2,
'mar' => 3,
'apr' => 4,
'may' => 5
);
if($a == $b)
return 0;
if(!isset($months[$a],$months[$b]))
return $a > $b;
return ($months[$a] > $months[$b]) ? 1 : -1;
}
usort($data, "monthCompare");
echo "<pre>";
print_r($data);
Возвращает:
Array
(
[0] => aaa
[1] => ccc
[2] => ddd
[3] => Jan
[4] => Feb
[5] => Mar
[6] => Apr
)
Однако - это подчеркивает недостаток логики в вашем вопросе. Вы просили, чтобы он сортировался по последовательности месяц, иначе по алфавиту . Проблема в том, что вы недостаточно определили порядок сортировки таким образом, чтобы его можно было надежно тиражировать. Например, использование приведенного выше алгоритма и массива "ddd", "aaa", "ccc", "Apr", "Mar", "Jan", "Feb"
(т. Е. Одинаковых элементов) дает результат:
Array
(
[0] => aaa
[1] => Jan
[2] => Feb
[3] => Mar
[4] => Apr
[5] => ccc
[6] => ddd
)
Оба ответа верны в соответствии с вашим запросом, поэтому вам нужно более подробно определить требование сортировки.