【问题标题】:php array_multisort(): Array sizes are inconsistentphp array_multisort():数组大小不一致
【发布时间】:2018-03-06 02:12:19
【问题描述】:

如何使用 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 )
);

【问题讨论】:

  • 改进格式

标签: php array-multisort


【解决方案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 */
);

【讨论】:

  • 注:手册中其实也有类似的例子here
猜你喜欢
  • 2014-04-10
  • 1970-01-01
  • 1970-01-01
  • 2013-06-01
  • 2014-08-12
  • 2015-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多