Ordenar matriz multidimensional php por subvalor

Tengo esta matriz

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 ) ) 

Ahora me gustaría ordenar esta matriz por [mid] ¿Cómo hago esto?

Actualmente ordeno esto en un bucle foreach
Tiene que haber una mejor manera

EDITAR esperaba producir algo así como

[mid] key => array value

Gracias

Puede usar la función de usort .

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

Míralo

La otra solución es usar array_multisort

  $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); ?> 

Actualizar

Recientemente respondí esta pregunta de una manera mucho más competente en el tema “definitivo” sobre la clasificación de matrices multidimensionales. La siguiente respuesta se dirige a las versiones anteriores de PHP (5.2 y anteriores); si bien el concepto es sólido, hoy en día existen formas mucho mejores de hacer las cosas. Lea las respuestas sobre otra pregunta en su lugar.

Respuesta original (muy desactualizada)

usort está ahí exactamente para esta situación. Si también necesita claves para preservar, la función apropiada sería uasort .

Por ejemplo:

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

Por supuesto, si no te importa, puedes declarar la función de comparación correctamente:

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

Y úsalo así:

 usort($array, 'compareMid'); 

Todo esto está en la documentación.