php сортировать массив по $ array [*] [sum of this]

1

У меня есть многомерный массив, который хранит информацию об игроках в игре. Он хранит массив для каждого игрока, и каждый игрок представляет собой массив информации. Одним из значений в каждом игроке является массив баллов. Я хочу вывести свои данные в таблицу в порядке наивысшего общего балла до самого низкого.

На данный момент выход не имеет особого порядка. Единственный способ получить общий балл - 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 )
  • 2
    Используйте usort () с обратным вызовом, который сравнивает суммы
  • 0
    @MarkBaker Спасибо за ссылку. Я делал это раньше, но не совсем понял это. Теперь у меня есть эта строка кода usort(array_sum($allplayers[][3]),"cmp"); после функции. что я должен поставить между первым [] ? Вот чего я не понимаю. Еще раз спасибо
Показать ещё 2 комментария
Теги:
arrays
multidimensional-array
sorting

1 ответ

1
Лучший ответ

Вы можете добиться желаемого результата из встроенной функции usort() php. который предлагает @mark baker, прежде чем вы должны четко понимать эту функцию, поэтому некоторое объяснение usort

Синтаксис:

usort($unsorted_array,callbakc_function)

функция обратного вызова будет иметь два аргумента, которые являются последовательными элементами несортированного массива. например, в первый раз это будет (0,1) во втором (1,2) и так далее, и функция должна вернуть 0,1 или -1 в соответствии со следующими условиями

  1. если ваше сравнение обоих элементов по определенному условию равно, то 0

  2. если сравнение обоих элементов по конкретному условию меньше, чем -1

  3. если ваше сравнение обоих элементов по конкретному условию равно, то 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-документа.

  • 0
    аааа !!! благодарю вас :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню