php array_multisort(): 数组大小不一致
php array_multisort(): Array sizes are inconsistent
如何使用 php array_multisort 对这样的数组进行排序?我找不到此类数组的任何示例。我尝试了不同的途径,但我不断收到错误 array_multisort(): Array sizes are inconsistent。
$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 )
);
我认为你理解错了。 array_multisort 不是其他语言中的 "sort by"(即:按某些属性对数组元素进行排序),而是对第一个数组进行排序,并将该顺序回响到所有后续数组。如果相等,它会检查第二个数组的相应值,等等...
如果你想按分数 (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 */
);
如何使用 php array_multisort 对这样的数组进行排序?我找不到此类数组的任何示例。我尝试了不同的途径,但我不断收到错误 array_multisort(): Array sizes are inconsistent。
$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 )
);
我认为你理解错了。 array_multisort 不是其他语言中的 "sort by"(即:按某些属性对数组元素进行排序),而是对第一个数组进行排序,并将该顺序回响到所有后续数组。如果相等,它会检查第二个数组的相应值,等等...
如果你想按分数 (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 */
);