У меня есть массив имен месяцев, которые в настоящее время заказываются как («Апрель», «Август», «Февраль») и т. Д. Я хотел бы заказать этот список, чтобы он был в обычном месячном порядке, таком как («Январь», Февраль Март")
Этот массив заполняется из запроса SHOW TABLES sql, и, к сожалению, SHOW TABLES не имеет параметра ORDER BY, поэтому я считаю, что лучше всего добавить их в массив и изменить порядок массива, чтобы получить то, что я ищу.
Преобразуйте месяцы в числовое значение. Затем закажите свой массив численно, используя sort()
Вы можете использовать этот вопрос: конвертировать месяц от имени к числу
@ Ответ Мэтью, похоже, хорошо работает:
$date = date_parse('July');; echo $date["month"];
Рабочее решение
$months = array("April", "August", "February"); usort($months, "compare_months"); var_dump($months); function compare_months($a, $b) { $monthA = date_parse($a); $monthB = date_parse($b); return $monthA["month"] - $monthB["month"]; }
$input = array('May', 'December', 'March', 'July'); $output = array(); foreach($input as $month) { $m = date_parse($month); $output[$m['month']] = $month; } ksort($output); var_dump($output);
выходы
array 3 => string 'March' (length=5) 5 => string 'May' (length=3) 7 => string 'July' (length=4) 12 => string 'December' (length=8)
Это немного оптимизированная версия (без синтаксического анализа даты) ^^
$foobar_months = array( 'april','februari', 'march', 'may', 'june', 'januari', 'august', 'october', 'july', 'november', 'december', 'september' ); usort( $foobar_months, "sortMonths" ); var_dump( $foobar_months ); function sortMonths ( $a, $b ) { $months = array( 'januari', 'februari', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december' ); if ( array_search( $a, $months) == array_search( $b, $months) ) return 0; return array_search( $a, $months) > array_search( $b, $months) ? 1 : -1; }
Невозможно отсортировать массив как отдельный массив, поскольку система не знает, что январь на первом месте, а затем февраль и т. Д. Сначала вы можете определить хэш, например
a = {'January':0,'February':1,...'December':11}
Затем вы можете отсортировать массив таким образом
array_to_be_sorted = sorted(array_to_be_sorted, key = lambda(x): a[x])
Вы можете следовать ниже
switch ($ month) case 'january': $ order_month_list [1] = январь; ломать; $ order_month_list [2] = февраль; ломать; .. … $ order_month_list [12] = декабрь; ломать;
}