【问题标题】:Sorting an array by 2 values [duplicate]按2个值对数组进行排序[重复]
【发布时间】:2021-11-14 14:37:54
【问题描述】:

大家好,我对按 2 个值对数组进行排序有点困惑,但我知道我已经接近了,但是我无法正确地进行第二次排序。我将尝试解释以下信息:

$testData 数组包含每个球员的数据,顺序如下:打过的比赛、得分、姓名(仅供参考,得分大多为负数,但有时为正数,因为这是为了对我们的高尔夫联赛进行排名)

我在下面附加了我的 php 代码,我认为问题在于 array_multisort 中的 SORT 标志,但我都尝试了。感谢任何人对这个看似简单的问题的帮助。

<?php
$testData[]=array(8,-3,"Mike");
$testData[]=array(5,-5,"Bonnie");
$testData[]=array(1,-3,"Zack");
$testData[]=array(6,-3,"Tony");
$testData[]=array(2,-3,"Danny");
$testData[]=array(5,-4,"Bruce");
$testData[]=array(2,-5,"Ellen");
$testData[]=array(5,-4,"Christine");
$testData[]=array(4,-3,"Kenny");
$testData[]=array(3,-5,"Jason");
$testData[]=array(7,-7,"Chris");
$testData[]=array(8,-4,"Steve");
$testData[]=array(7,-6,"Joe");
$testData[]=array(2,-4,"Rodger");
$testData[]=array(7,-2,"Clair");
$testData[]=array(1,-2,"Dean");
foreach($testData as $data)
{
$gamesPlayed[]=$data[0][0];
$score[]=$data[0][1];
}
array_multisort($gamesPlayed,SORT_NUMERIC,$score,SORT_NUMERIC,$testData);
rsort($testData);
print_r(json_encode($testData));
?>

我希望能够按两 (2) 个场景排序...

场景 1:按玩的游戏最多到最少的游戏排序,但如果玩的游戏相同或与其他玩家打成平手,得分最低(最负)的玩家将排名高于其他玩家。

[
[8,-4,"Steve"],
[8,-3,"Mike"],
[7,-6,"Joe"],
[7,-2,"Clair"],
[7,-7,"Chris"],
[6,-3,"Tony"],
[5,-5,"Bonnie"],
[5,-4,"Christine"],
[5,-4,"Bruce"],
[4,-3,"Kenny"],
[3,-5,"Jason"],
[2,-5,"Ellen"],
[2,-4,"Rodger"],
[2,-3,"Danny"],
[1,-3,"Zack"],
[1,-2,"Dean"]
]

场景 2:从最低分数到最高分数排序,但如果分数相等或与其他玩家打成平手,则玩家玩的最多游戏将排在其他玩家之前。

[
[7,-7,"Chris"],
[7,-6,"Joe"],
[5,-5,"Bonnie"],
[3,-5,"Jason"],
[2,-5,"Ellen"],
[8,-4,"Steve"],
[5,-4,"Bruce"],
[5,-4,"Christine"],
[2,-4,"Rodger"],
[8,-3,"Mike"],
[6,-3,"Tony"],
[4,-3,"Kenny"],
[2,-3,"Danny"],
[1,-3,"Zack"],
[7,-2,"Clair"],
[1,-2,"Dean"]
]

【问题讨论】:

标签: php sorting multidimensional-array


【解决方案1】:

您可以将您的问题简化为一种状态,对于第一种情况,让我们计算每场比赛的得分(总得分/比赛的总分),而在另一种情况下则相反。 这可能是一个非常简单的解决方案,我觉得在某些情况下很有用。但要更准确。我想使它成为一个位掩码问题很棒! 让我们以第一个场景为例。

您将保留比赛的第一个位和得分的第二个位。 例如 : 阿诺尔:4场比赛:12分 分数:4场:11分 让我们转到 Bits 演示文稿:

Anoir : 0100 1100 
Mark : 0100 0111 

通过一个简单的比较:很明显 Anoir 将排在 Mark 之上 我希望这会有所帮助。

【讨论】:

  • 这很清楚,但我不知道如何计算位数。我只想简单的排序,比如亚马逊:最低价到最高价+最高评分到最低评分。
  • 将其转换为位符号是不必要的卷积。 PHP 可以很好地处理 2 规则要求,并提供两个函数来完全满足简要说明。
猜你喜欢
  • 1970-01-01
  • 2014-12-02
  • 2013-07-26
  • 2015-03-16
  • 2013-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多