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

У меня этот массив

Array ( [data] => Array ( [0] => Array ( [id] => 1293005125 [viewed] => TRUE [active] => TRUE [time] => December 22, 2010 13:00 hours [timestamp] => 1293006034 [initial_timestamp] => 1293005125 [user] => administrator ) [1] => Array ( [mid] => 1293001908 [viewed] => TRUE [active] => TRUE [time] => December 22, 2010 13:00 hours [timestamp] => 1293001908 [initial_timestamp] => 1293001908 [user] => administrator ) [2] => Array ( [mid] => 1293009999 [viewed] => TRUE [active] => TRUE [time] => December 22, 2010 13:00 hours [timestamp] => 1293009999 [initial_timestamp] => 1293009999 [user] => administrator ) [3] => Array ( [mid] => 1293006666 [viewed] => TRUE [active] => TRUE [time] => December 22, 2010 13:00 hours [timestamp] => 1293006666 [initial_timestamp] => 1293006666 [user] => administrator ) [4] => Array ( [mid] => 1293005125 [viewed] => TRUE [active] => TRUE [time] => December 22, 2010 13:00 hours [timestamp] => 1293006125 [initial_timestamp] => 1293005125 [user] => administrator2 ) ) 

Теперь я хотел бы отсортировать этот массив [mid] Как мне это сделать?

В настоящее время я сортирую это в цикле foreach
Там должен быть лучший путь

EDIT Я надеялся вывести что-то вроде

[mid] key => array value

благодаря

Solutions Collecting From Web of "Сортировка многомерного массива php по суб-значению"

Вы можете использовать функцию usort .

 function cmp($a, $b) { return $a["mid"] - $b["mid"]; } usort($arr, "cmp"); 

Видеть это

Другое решение использует array_multisort

 <?php // Obtain a list of columns foreach ($data as $key => $row) { $mid[$key] = $row['mid']; } // Sort the data with mid descending // Add $data as the last parameter, to sort by the common key array_multisort($mid, SORT_DESC, $data); ?> 

Обновить

Недавно я ответил на этот вопрос гораздо более способным образом в «окончательной» теме по сортировке многомерных массивов. Ниже приведен пример старых версий PHP (5.2 и более ранних); в то время как концепция звучит, в наши дни есть намного лучшие способы делать вещи. Вместо этого прочитайте ответы на другой вопрос.

Оригинальный (очень устаревший) ответ

usort существует именно для этой ситуации. Если вам также нужны ключи для сохранения, соответствующей функцией будет uasort .

Например:

 usort($array, create_function('$a, $b', 'if ($a["mid"] == $b["mid"]) return 0; return ($a["mid"] < $b["mid"]) ? -1 : 1;')); 

Конечно, если вы не возражаете, вы можете правильно объявить функцию сравнения:

 function compareMid($a, $b) { if ($a['mid'] == $b['mid']) { return 0; } return ($a['mid'] < $b['mid']) ? -1 : 1; } 

И используйте его вот так:

 usort($array, 'compareMid'); 

Все это в документации.