У меня есть многомерный массив, который хранит информацию об игроках в игре. Он хранит массив для каждого игрока, и каждый игрок представляет собой массив информации. Одним из значений в каждом игроке является массив баллов. Я хочу вывести свои данные в таблицу в порядке наивысшего общего балла до самого низкого.
На данный момент выход не имеет особого порядка. Единственный способ получить общий балл - array_sum($allplayers[0][2])
или аналогичный. Как я могу отсортировать массив $allplayers
так, что, когда я $allplayers
через него для вывода результатов, он начнется с самого высокого array_sum
и будет работать вниз?
Пример массива:
//I want to sort $Allplayers by sum of key [3]
$Allplayers ( [0] => Array (
[0] => Winning
[1] => 224
[4] => 0
[2] => Array ( [0] => 107 [1] => 114 [3] => 104 )
[3] => Array ( [0] => 107 [1] => 114 ) )
[1] => Array (
[0] => Losing
[1] => 225
[2] => Array ( [0] => 76 )
[3] => Array ( [0] => 76 )
[4] => 1 )
Вы можете добиться желаемого результата из встроенной функции usort() php. который предлагает @mark baker, прежде чем вы должны четко понимать эту функцию, поэтому некоторое объяснение usort
Синтаксис:
usort($unsorted_array,callbakc_function)
функция обратного вызова будет иметь два аргумента, которые являются последовательными элементами несортированного массива. например, в первый раз это будет (0,1) во втором (1,2) и так далее, и функция должна вернуть 0,1 или -1 в соответствии со следующими условиями
если ваше сравнение обоих элементов по определенному условию равно, то 0
если сравнение обоих элементов по конкретному условию меньше, чем -1
если ваше сравнение обоих элементов по конкретному условию равно, то 1
и php будет сортировать массив по этому возвращаемому значению, например, если ваша функция возвращает 1 для индекса индекса 0,1, то он будет заменять два элемента. и, наконец, ваш массив будет отсортирован с использованием пользовательского условия.
ПРИМЕЧАНИЕ: первый аргумент функции обратного вызова будет следующим элементом массива, а второй будет текущим в этом экземпляре. например, при сравнении (0,1) индекс первым аргументом wil будет массив 1, а второй будет array [0].
Теперь рассмотрим вашу проблему, если вы используете usort здесь, вы получите каждый массив игроков в своей функции, тогда вам нужно рассчитать сумму очков каждого игрока, которая расположена в третьем элементе индекса, и сравнить обе суммы и вернуть соответствующее целочисленное значение. поэтому вы должны закодировать эту проблему, как этот
sort($Allplayers,"cmp");
function cmp($a,$b)
{
$total1 =array_sum($a[3]);
$total2 =array_sum($b[3]);
if($total1 == $total2)
return 0;
return ($total1 > $total2)? -1 :1;
}
ССЫЛКИ: usort() из php-документа.
usort(array_sum($allplayers[][3]),"cmp");
после функции. что я должен поставить между первым[]
? Вот чего я не понимаю. Еще раз спасибо