Php 遍历数组并进行排序
好的,交易是这样的:我试图根据以下标准(按顺序)对团队进行排序:Php 遍历数组并进行排序,php,arrays,sorting,Php,Arrays,Sorting,好的,交易是这样的:我试图根据以下标准(按顺序)对团队进行排序: 总体记录 分区记录 直接结果 要点 对于项目1、2和4,我可以简单地从SQL数据库中提取数据。因此,当我遍历SQL结果时,我可以创建以下数组: arr[$row['team_id']] => array('overall_wins' => $row['wins'], 'division_wins' => $row['div_wins'],
arr[$row['team_id']] => array('overall_wins' => $row['wins'],
'division_wins' => $row['div_wins'],
'points' => $row['pts']);
到目前为止一切都很好。问题是指两个或两个以上团队的总体胜利和分区胜利相等。在这种情况下,我需要能够利用他们的头对头记录打破平局
因此,我的想法是迭代上述数组,并使用临时变量检查当前的总体胜利
和部门胜利
是否与前一个团队的价值相等,然后“做点什么”…使用正面对正面记录打破平局
现在,我可以再次使用SQL获取两个团队之间的正面记录,所以这不是问题,但我的问题是:
如何利用我的阵型进行展示,利用正面对决记录打破两队的平局?
让我们使用以下示例:
team_id overall_wins division_wins
------------------------------------------
B 6 6
A 7 7
E 6 5
C 6 6
G 10 9
D 4 3
F 2 0
在第一次通过时,这将作为:
team_id overall_wins division_wins
------------------------------------------
G 10 9
A 7 7
B 6 6
C 6 6
E 6 5
D 4 3
F 2 0
…但是让我们假设C队迎头痛击B队。在这种情况下,B队和C队需要按上述顺序交换。
我不知道如何仅在PHP数组的范围内做到这一点,而不完全疯狂地使用整个临时数组等等
想法?谢谢。您可以使用usort
function compareTeams ($a, $b){
if ($a["overall_wins"] == $b["overall_wins"]){
if ($a["division_wins"] == $b["division_wins"]){
if ($a["head_to_head"] == $b["head_to_head"]){
return 0;
} else {
return $a["head_to_head"] == $b["head_to_head"];
}
} else {
return $a["division_wins"] - $b["division_wins"];
}
} else {
return $a["overall_wins"] - $b["overall_wins"];
}
}
usort($arr, "compareTeams");
$arr现在将根据您的需要进行排序那么,什么样的模式可以让您确定正面对正面的结果呢?@Jon我直接用SQL比较这两个团队的正面对正面的得分,并从中获得赢/输的数字。如果您只是
usort()
,你可以调用任何函数/当你意识到整体和分区的胜利是一样的时,你可以调用任何数据库调用…@praguian:这是一个已经固定的打字错误,意思是:)(是的,你已经看到了;))在选择部分选择一个迎头胜利字段作为派生/计算字段,然后你可以对其进行排序,例如,选择team.id,(此处为魔术素材)作为head-to-head。。。。按总体获胜、分区获胜、人头对人头排序