У меня есть массив как следующий, и я хочу заказать этот массив по значению ключевой «атаки». Первые ключи массивов (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);
Надеюсь это поможет.