PHP переупорядочивает массив имен месяцев

У меня есть массив имен месяцев, которые в настоящее время заказываются как («Апрель», «Август», «Февраль») и т. Д. Я хотел бы заказать этот список, чтобы он был в обычном месячном порядке, таком как («Январь», Февраль Март")

Этот массив заполняется из запроса 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]) 

Вы можете следовать ниже

  1. Получите вывод SHOW TABLES, который будет списком заказов без учета заказов («Апрель», «Август», «Февраль»)
  2. передайте это в корпус переключателя, как показано ниже
    $ output_show_tables = ("Апрель", "Август", "Февраль") $ order_month_list = array (); foreach ($ output_show_tables как $ month) {

switch ($ month) case 'january': $ order_month_list [1] = январь; ломать; $ order_month_list [2] = февраль; ломать; .. … $ order_month_list [12] = декабрь; ломать;

}

  1. теперь вы получаете список заказов за несколько месяцев