array_multisort для сортировки нескольких массивов - PullRequest
0 голосов
/ 21 декабря 2009

Я искал это, но не могу найти точного ответа. Я хочу использовать array_multisort для одновременной сортировки 3 массивов на основе числовых значений в 3 массивах. По сути, я хочу сделать таблицу «турнирной таблицы», похожую на ту, которую вы видели бы для турнирной таблицы NFL / NHL и т. Д. У меня есть 3 массива, tempID (строка), tempWins (числовое), tempWinPercentage (числовое). Мне нужно, чтобы все 3 сортировались одновременно, основываясь сначала на победах, а затем, если есть ничья, процент выигрышей.

Кажется, я не могу заставить array_multisort работать более чем с двумя массивами, так что, возможно, я неправильно понимаю терминологию, когда говорят, что она может работать с "несколькими" массивами. Спасибо!

Ответы [ 2 ]

5 голосов
/ 21 декабря 2009

У вас должен быть массив данных, подобный этому:

$data = array(
    0 => array(
        'tempIDs' => 'something',
        'tempWins' => 10,
        'tempWinPercentage' => 50,
    ),
    1 => array(
        'tempIDs' => 'something else',
        'tempWins' => 10,
        'tempWinPercentage' => 60,
    ),
    3 => array(
        'tempIDs' => 'something more',
        'tempWins' => 20,
        'tempWinPercentage' => 50,
    ),
);

Затем отсортируйте этот массив, используя usort($data, 'my_sort_cb')

Ваш метод обратного вызова должен сначала сравнить tempWins, и если они равны, сравнить tempWinPercentages:

function my_sort_cb($a, $b) {
    if ($a['tempWins'] > $b['tempWins']) return 1;
    if ($a['tempWins'] < $b['tempWins']) return -1;

    if ($a['tempWinPercentage'] > $b['tempWinPercentage']) return 1;
    if ($a['tempWinPercentage'] < $b['tempWinPercentage']) return -1;
    return 0;
}

(это можно сделать короче)

1 голос
/ 21 декабря 2009

Я не могу получить array_multisort для работать с более чем 2 массивами, так может быть, я неправильно понимаю Терминология, когда они говорят, что это может работать с «несколькими» массивами. Спасибо!

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

Например, выполнение этого кода

$a1 = array(12, 23, 34, 45, 45, 34);
$a2 = array(234, 56, 243, 456, 34, 346);
$a3 = array(654, 56, 8, 12, 56, 90);

array_multisort($a1, $a2, $a3);

вы получите отсортированные массивы, как если бы они были определены как

$a1 = array(12, 23, 34, 34, 45, 45);
$a3 = array(654, 56, 8, 90, 56, 12);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...