php - 对数组进行两次排序或使用 php 微调数组
问题描述
假设我有一个足球联赛数组:
$array = [
'teamId1' =>
[
'games' => 7,
'wins' => 2,
'loss' => 4,
'duals' => 1,
'point' => 7
],
'teamId2' =>
[
'games' => 7,
'wins' => 3,
'loss' => 1,
'duals' => 3,
'point' => 12
],
'teamId3' =>
[
'games' => 7,
'wins' => 4,
'loss' => 3,
'duals' => 0,
'point' => 12
],
'teamId4' =>
[
'games' => 7,
'wins' => 6,
'loss' => 0,
'duals' => 1,
'point' => 19
],
'teamId5' =>
[
'games' => 7,
'wins' => 3,
'loss' => 2,
'duals' => 2,
'point' => 11
],
.
.
.
'teamId18' =>
[
'games' => 7,
'wins' => 5,
'loss' => 0,
'duals' => 2,
'point' => 17
],
];
我想对此进行排序By POINT DESC
;所以我确实使用这个函数来按点对我的数组进行排序:
function sortArray($array, $on, $order=SORT_ASC)
{
$new_array = array();
$sortable_array = array();
if (count($array) > 0)
{
foreach ($array as $k => $v)
{
if (is_array($v))
{
foreach ($v as $k2 => $v2)
{
if ($k2 == $on)
{
$sortable_array[$k] = $v2;
}
}
}
else
{
$sortable_array[$k] = $v;
}
}
switch ($order) {
case SORT_ASC:
asort($sortable_array);
break;
case SORT_DESC:
arsort($sortable_array);
break;
}
foreach ($sortable_array as $k => $v)
{
$new_array[$k] = $array[$k];
}
}
return $new_array;
}
$sortByPoint = sortArray($result, 'point', SORT_DESC);
好的,现在我有一个按点排序的数组,但是现在我需要像fine tune
我的数组这样的东西来重新排序数组when two-or more- teams have same point, the team/s with more wins come before other
。
我知道我可以遍历排序数组并做一些事情,但我确信有更短和更棘手的方法可以做到这一点。
有人对此有任何想法吗?
提前致谢
解决方案
为此编写特定的排序会更容易。使用usort()
,您可以在一个简单的函数中根据需要为条件添加复杂层...
usort($array, function ($a, $b) {
if ( $a['point'] == $b['point'] ){
// Sort by wins (descending)
return $b['wins'] - $a['wins'];
}
// Sort by points descending
return $b['point'] - $a['point'] ;
});
print_r($array);
这会对实际数组进行排序,因此 output $array
。
您可以通过说是否相同的获胜次数、按损失排序等来进一步扩展它。
推荐阅读
- mysql - 使用 slqu 在插入时使用 slick 返回结果集
- javascript - 更改特定输入字段时如何避免表单的onchange事件?
- bash - Bash Cronjob 没有执行第二个命令来启动新的 gnu-screen
- rxjs - 无限滚动的可观察分页以保持最新
- excel - VBA从另一个表调用标签
- assembly - 希望将数组中的第一个值修改为程序集中的新最大值
- eigen - 使用 unaryExpr 在 Eigen 中模拟 std::transform-like API
- selenium - Selenium Edge - 如何清除缓存并关闭恢复页面弹出窗口
- mysql - 更新数据库:使用 mysql 的 asp.net core 错误
- python - 如何使用 boto3 和 rds-data 访问秘密管理器