Функция сортировки массива в PHP

Я определил myArr = ("Apr","Mar","May") . Есть ли функция сортировки для сортировки элементов массива по своей природе в последовательности месяцев в противном случае по алфавиту.

Переменные элементов массива могут быть изменены во время выполнения.

Я хочу, чтобы он выводился после Mar, Apr, May, используя цикл foreach.

Solutions Collecting From Web of "Функция сортировки массива в PHP"

Вы можете использовать usort () и создать свою собственную функцию для сравнения месяцев.

 function monthCompare($a, $b) { $months = array('jan' => 1, 'feb' => 2..._); if($a == $b) { return 0; } return ($months[$a] > $months[$b]) ? 1 : -1; } 

Настроить на ответ @ 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" (т. "ddd", "aaa", "ccc", "Apr", "Mar", "Jan", "Feb" же элементы) дает результат:

 Array ( [0] => aaa [1] => Jan [2] => Feb [3] => Mar [4] => Apr [5] => ccc [6] => ddd ) 

Оба ответа верны в соответствии с вашим запросом, поэтому вам нужно более подробно определить требование сортировки.

Нет такой функции. Но … вы все равно можете решить свою проблему изящно. Вы должны ассоциировать месячные имена с номерами (1 для 2 января для февраля и т. Д.). Это наиболее распространенный подход в программировании.

Определите свой массив как:

 $myArr = array(1=>"Jan", 2=>"Feb" ... ) 

И тогда вы можете сортировать свои $ myArr по ключам ( ksort ):

 ksort($myArr); var_export($myArr); 

Это будет сортировать ваш массив в порядке возрастания по ключам.