Php 多维数组使用数组中的数值从高到低排序
我目前正在寻找一种有效的方法,使用Php 多维数组使用数组中的数值从高到低排序,php,Php,我目前正在寻找一种有效的方法,使用avgTotalPoints根据最高->最低对数组/对象进行排序,然后在rank字段中根据rank放置一个数值。我看了一些例子,并能够相应地创建一个函数。然而,它现在正在发挥作用。我试图在下面显示的排序函数中访问avgTotalPoints,但由于数组是多深度的,因此无法访问。关于如何实现这一点,有什么指导吗 function sortHighestToLowest($arr) { if (isset($arr) && !empty($a
avgTotalPoints
根据最高->最低对数组/对象进行排序,然后在rank
字段中根据rank放置一个数值。我看了一些例子,并能够相应地创建一个函数。然而,它现在正在发挥作用。我试图在下面显示的排序函数中访问avgTotalPoints
,但由于数组是多深度的,因此无法访问。关于如何实现这一点,有什么指导吗
function sortHighestToLowest($arr)
{
if (isset($arr) && !empty($arr)) {
uasort($arr, function ($a, $b) {
return $a['avgTotalPoints'] <=> $b['avgTotalPoints'];
});
return array_reverse($arr);
}
return null;
}
期望结果
stdClass Object
(
[mlb] => stdClass Object
(
[mary] => stdClass Object
(
[avgTotalPoints] => 114.9875
[avgPointsDifferential] => 6.2625
[rank] => 1
)
[samantha] => stdClass Object
(
[avgTotalPoints] => 91.625
[avgPointsDifferential] => -36.85
[rank] => 2
)
[james] => stdClass Object
(
[avgTotalPoints] => 80.675
[avgPointsDifferential] => -0.81125
[rank] => 3
)
[timothy] => stdClass Object
(
[avgTotalPoints] => 69.2625
[avgPointsDifferential] => -19.14125
[rank] => 4
)
[lucas] => stdClass Object
(
[avgTotalPoints] => 66.825
[avgPointsDifferential] => -9.10625
[rank] => 5
)
)
[nhl] => stdClass Object
(
[bubba] => stdClass Object
(
[avgTotalPoints] => 119.6
[avgPointsDifferential] => 28.133333333333
[rank] => 1
)
[rick] => stdClass Object
(
[avgTotalPoints] => 91.614285714286
[avgPointsDifferential] => 11.217142857143
[rank] => 2
)
[james] => stdClass Object
(
[avgTotalPoints] => 90.185714285714
[avgPointsDifferential] => 10.915714285714
[rank] => 3
)
[samantha] => stdClass Object
(
[avgTotalPoints] => 82.2
[avgPointsDifferential] => 15.005714285714
[rank] => 4
)
[peter] => stdClass Object
(
[avgTotalPoints] => 77.657142857143
[avgPointsDifferential] => -13.318571428571
[rank] => 5
)
)
)
```
由于您的阵列包含多个子阵列,您希望对这些子阵列进行单独排序,因此可以利用对每个子阵列应用排序 这样做之后,您就可以简单地循环相同的子数组(通过引用),同时递增
$rank
变量,并将其分配给每个条目
此外,不需要使用数组\u reverse
来反转排序,只需反转
比较的操作数即可
function sortHighestToLowest(array $arr): array
{
return array_map(static function (array $entries): array {
uasort($entries, static function (array $entry1, array $entry2): int {
return $entry2['avgTotalPoints'] <=> $entry1['avgTotalPoints'];
});
$rank = 0;
foreach ($entries as &$entry) {
$entry['rank'] = ++$rank;
}
return $entries;
}, $arr);
}
函数sortHighestToLowest(数组$arr):数组
{
返回数组映射(静态函数(数组$entries):数组{
uasort($entries,静态函数(数组$entry1,数组$entry2):int{
返回$entry2['avgTotalPoints']$entry1['avgTotalPoints'];
});
$rank=0;
foreach($entries as&$entry){
$entry['rank']=++$rank;
}
返回$entries;
},$arr);
}
输入数组是什么样子的?旁注:同时使用
isset()
和!如果条件是冗余的,则为空()
。您只需使用!empty()
因为这也包括了isset()的功能。@Jeto抱歉,我现在添加了json输入。@MagnusEriksson很好。我总是对此感到困惑。我会改变的,这太完美了。我正在阅读array\u map
,并正在了解如何使用它!
function sortHighestToLowest(array $arr): array
{
return array_map(static function (array $entries): array {
uasort($entries, static function (array $entry1, array $entry2): int {
return $entry2['avgTotalPoints'] <=> $entry1['avgTotalPoints'];
});
$rank = 0;
foreach ($entries as &$entry) {
$entry['rank'] = ++$rank;
}
return $entries;
}, $arr);
}