Как отсортировать многомерный массив по значению?

У меня есть массив как следующий, и я хочу заказать этот массив по значению ключевой «атаки». Первые ключи массивов (15, 13, 18) являются идентификаторами некоторого определенного элемента из базы данных, поэтому я не хочу, чтобы эти ключи менялись при сортировке массива. Любая помощь будет принята с благодарностью.

Это массив:

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

Использовать uasort() :

Эта функция сортирует массив таким образом, что индексы массива сохраняют свою корреляцию с элементами массива, с которыми они связаны, используя пользовательскую функцию сравнения.

Это используется в основном при сортировке ассоциативных массивов, где фактический порядок элементов значителен.

Пример:

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

Если значения всегда являются строками, вы также можете использовать strcmp() в функции cmp() :

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

Обновить:

Для сортировки по убыванию вам просто нужно изменить возвращаемые значения:

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

или забрать предложение @ salathe:

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

Просто используйте array_multisort

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

Надеюсь это поможет.