php array_multisort(): размеры массива несовместимы
Как я могу использовать php array_multisort для сортировки таких массивов? Я не могу найти никаких примеров с этим типом массивов. Я пробовал разные пути, но продолжаю получать ошибку array_multisort(): размеры массивов несовместимы.
$array= Array (
"Arnold" => Array ( "index" => 2, "games_played" => 1, "score" => 5 ),
"Chris" => Array ( "index" => 1, "games_played" => 1, "score" => 5 ),
"Mike" => Array ( "index" => 0, "games_played" => 2, "score" => 5 )
);
1 ответ
Я думаю, вы понимаете это неправильно. Аргумент array_multisort - это не то, что будет "сортировать по" в других языках (то есть: сортировать элементы массива по некоторым свойствам), вместо этого он сортирует первый массив и отразит этот порядок для всех последующих массивов. И в случае равенства он проверяет соответствующие значения вторых массивов и т.д...
Если вы хотите упорядочить свой пример по счету (desc), затем по игре, затем по индексу (а затем по имени, но этого никогда не должно происходить, так как индексы уникальны), вы должны сделать:
$array= Array (
"Arnold" => Array ( "index" => 2, "games_played" => 1, "score" => 5 ),
"Chris" => Array ( "index" => 1, "games_played" => 1, "score" => 5 ),
"Mike" => Array ( "index" => 0, "games_played" => 2, "score" => 5 )
);
$names = [];
$indexes = [];
$games_played = [];
$scores = [];
foreach ($array as $name => $player) {
$names[] = $name;
$indexes[] = $player['index'];
$games_played[] = $player['games_played'];
$scores[] = $player['score'];
}
array_multisort(
$scores, SORT_DESC,
$games_played,
$indexes,
$names,
$array /* This line will sort the initial array as well */
);