Сортировка многомерного массива по значению

Возможный дубликат:
Как сортировать многомерный массив в PHP

Как я могу отсортировать этот массив по значению ключа «order»? Несмотря на то, что значения в настоящее время являются последовательными, они не всегда будут.

Array ( [0] => Array ( [hashtag] => a7e87329b5eab8578f4f1098a152d6f4 [title] => Flower [order] => 3 ) [1] => Array ( [hashtag] => b24ce0cd392a5b0b8dedc66c25213594 [title] => Free [order] => 2 ) [2] => Array ( [hashtag] => e7d31fc0602fb2ede144d18cdffd816b [title] => Ready [order] => 1 ) ) 

Попробуйте использовать: Если вы все еще на PHP 5.2 или ранее, сначала вам нужно определить функцию сортировки:

 function sortByOrder($a, $b) { return $a['order'] - $b['order']; } usort($myArray, 'sortByOrder'); 

Начиная с PHP 5.3, вы можете использовать анонимную функцию:

 usort($myArray, function($a, $b) { return $a['order'] - $b['order']; }); 

И, наконец, с PHP 7 вы можете использовать «оператора космического корабля»:

 usort($myArray, function($a, $b) { return $a['order'] <=> $b['order']; }); 

Чтобы распространить это на многомерную сортировку, ссылайтесь на второй / третий элементы сортировки, если первый равен нулю – лучше всего объясняется ниже. Вы также можете использовать это для сортировки по подэлементам.

 usort($myArray, function($a, $b) { $retval = $a['order'] <=> $b['order']; if ($retval == 0) { $retval = $a['suborder'] <=> $b['suborder']; if ($retval == 0) { $retval = $a['details']['subsuborder'] <=> $b['details']['subsuborder']; } } return $retval; }); 

Если вам нужно сохранить ассоциации ключей, используйте uasort() – см. Сравнение функций сортировки массивов в руководстве

 function aasort (&$array, $key) { $sorter=array(); $ret=array(); reset($array); foreach ($array as $ii => $va) { $sorter[$ii]=$va[$key]; } asort($sorter); foreach ($sorter as $ii => $va) { $ret[$ii]=$array[$ii]; } $array=$ret; } aasort($your_array,"order"); 

Я использую эту функцию:

 function array_sort_by_column(&$arr, $col, $dir = SORT_ASC) { $sort_col = array(); foreach ($arr as $key=> $row) { $sort_col[$key] = $row[$col]; } array_multisort($sort_col, $dir, $arr); } array_sort_by_column($array, 'order'); 

Обычно я использую usort и передаю свою собственную функцию сравнения. В этом случае это очень просто:

 function compareOrder($a, $b) { return $a['order'] - $b['order']; } usort($array, 'compareOrder'); 
 $sort = array(); $array_lowercase = array_map('strtolower', $array_to_be_sorted); array_multisort($array_lowercase, SORT_ASC, SORT_STRING, $alphabetically_ordered_array); 

Это касается как букв верхнего, так и нижнего регистра.