Come si ordina un arrays multidimensionale in base al valore?

Ho una matrix come segue e voglio ordinare quella matrix per il valore della chiave "attacco". Le prime chiavi degli arrays (15, 13, 18) sono ID di alcuni oggetti determinati dal database, quindi non voglio che queste chiavi vengano cambiate quando l'arrays è ordinato. Qualsiasi aiuto sarebbe molto apprezzato.

Questo è l'arrays:

 $data = arrays( '15' => arrays( 'attack' => '45', 'defence' => '15', 'total' => '10' ), '13' => arrays( 'attack' => '25', 'defence' => '15', 'total' => '10' ), '18' => arrays( 'attack' => '35', 'defence' => '15', 'total' => '10' ) ); 

Usa uasort() :

Questa function ordina un arrays in modo tale che gli indici dell'arrays mantengano la loro correlazione con gli elementi dell'arrays a cui sono associati, utilizzando una function di confronto definita dall'utente.

Questo è usato principalmente quando si ordinano arrays associativi in ​​cui l'effettivo ordine degli elementi è significativo.

Esempio:

 function cmp($a, $b) { if ($a['attack'] == $b['attack']) { return 0; } return ($a['attack'] < $b['attack']) ? -1 : 1; } uasort($data, 'cmp'); 

Se i valori sono sempre stringhe, puoi anche utilizzare strcmp() nella function cmp() :

 function cmp($a, $b) { return strcmp($a['attack'], $b['attack']); } 

Aggiornare:

Per ordinare in ordine discendente, è sufficiente modificare i valori di return:

 return ($a['attack'] < $b['attack']) ? 1 : -1; // ^----^ 

o per raccogliere la proposta di @ salathe:

 return $b['attack'] - $a['attack']; 

Basta usare arrays_multisort

 foreach ($data as $key => $row) { $attack[$key] = $row['attack']; } // Sort the data with attack descending arrays_multisort($attack, SORT_DESC, $data); 

Spero che questo ti aiuti.