PHP 根据 2 个以上的条件对数组进行多排序
PHP Multisort array on more than 2 criteria
我写了一个 php 脚本,它将根据强度和道德等参数执行完整的(荷兰)足球比赛。
所有回合都'played'后,我用usort
来定义最终结果。
这些结果基于 'Points' 字段。但是,当两支球队的积分相同时,则需要通过净胜球的比较来进一步排名。
我尝试使用第一个排序 om 'Points' 和之后的排序 om 'GoalDifference (GD)' 来完成此排序。不幸的是,在后一种情况下,球门差被正确排序,但积分却没有正确排序...
这是团队数组现在的样子:
$teams = array
(
array(
'Id' => 1,
'Teamname' => 'Team 1,
'Strength' => 22,
'Moral' => 15,
'Points' => 0,
'Pro' => 0,
'Contra'=> 0,
'GD' => 0
)
}
usort 函数下方
usort($teams, function($a, $b) {
return $a['Points'] < $b['Points'];
});
usort($teams, function($a, $b) {
return $a['GD'] < $b['GD'];
});
所以我的问题是,首先按得分排序然后再按进球差排序的最佳方法是什么?
亲切的问候,
基斯
同时包括两个比较。所以如果积分相同,就用净胜球
usort($teams, function($a, $b) {
return ($a['Points'] === $b['Points']
? $a['GD'] < $b['GD']
: $a['Points'] < $b['Points']);
});
您可以构建更复杂的排序函数,在其中优先检查列。
usort($teams, function($a, $b) {
if ($a["Points"] < $b["Points"]) return -1;
if ($a["Points"] > $b["Points"]) return 1;
if ($a['GD'] < $b['GD']) return -1;
if ($a['GD'] > $b['GD']) return 1;
return 0;
});
您可以使用array_multisort()
函数。
$points = array();
$gd = array();
foreach ($teams as $key => $row) {
$points[$key] = $row['Points'];
$gd[$key] = $row['GD'];
}
array_multisort($points, SORT_DESC, $gd, SORT_DESC, $teams);
我写了一个 php 脚本,它将根据强度和道德等参数执行完整的(荷兰)足球比赛。
所有回合都'played'后,我用usort
来定义最终结果。
这些结果基于 'Points' 字段。但是,当两支球队的积分相同时,则需要通过净胜球的比较来进一步排名。
我尝试使用第一个排序 om 'Points' 和之后的排序 om 'GoalDifference (GD)' 来完成此排序。不幸的是,在后一种情况下,球门差被正确排序,但积分却没有正确排序...
这是团队数组现在的样子:
$teams = array
(
array(
'Id' => 1,
'Teamname' => 'Team 1,
'Strength' => 22,
'Moral' => 15,
'Points' => 0,
'Pro' => 0,
'Contra'=> 0,
'GD' => 0
)
}
usort 函数下方
usort($teams, function($a, $b) {
return $a['Points'] < $b['Points'];
});
usort($teams, function($a, $b) {
return $a['GD'] < $b['GD'];
});
所以我的问题是,首先按得分排序然后再按进球差排序的最佳方法是什么?
亲切的问候,
基斯
同时包括两个比较。所以如果积分相同,就用净胜球
usort($teams, function($a, $b) {
return ($a['Points'] === $b['Points']
? $a['GD'] < $b['GD']
: $a['Points'] < $b['Points']);
});
您可以构建更复杂的排序函数,在其中优先检查列。
usort($teams, function($a, $b) {
if ($a["Points"] < $b["Points"]) return -1;
if ($a["Points"] > $b["Points"]) return 1;
if ($a['GD'] < $b['GD']) return -1;
if ($a['GD'] > $b['GD']) return 1;
return 0;
});
您可以使用array_multisort()
函数。
$points = array();
$gd = array();
foreach ($teams as $key => $row) {
$points[$key] = $row['Points'];
$gd[$key] = $row['GD'];
}
array_multisort($points, SORT_DESC, $gd, SORT_DESC, $teams);