我有一组对象,它们是足球运动员。数组可以包含从零到数千个玩家的任何东西。我想将其降低到最好的10.我的初步尝试如下:将对象数组降至“最好的10”
while (count($ArrayOfPlayers) > 10) {
$ArrayIndex = 0;
$WorstPlayerIndex = -1;
$WorstPlayerSkill = 9999999999;
foreach ($ArrayOfPlayers as $Player) {
$Skill = $Player->RatingsArray['Skill'];
if ($Skill < $WorstPlayerSkill) {
$WorstPlayerIndex = $ArrayIndex;
$WorstPlayerSkill = $Skill;
}
$ArrayIndex += 1;
}
// Found the worst player in the list, so remove him.
unset($ArrayOfPlayers[$WorstPlayerIndex]);
}
已经通过类似的帖子看,我知道现在的问题是,数组实际上没有被改变,所以while循环一直持续下去(电脑确实锁定)。
所以我试图纠正它如下,基于其他职位的建议。
while (count($ArrayOfPlayers) > 10) {
$WorstIndexPlayer = 0;
$WorstPlayerSkill = 9999999999;
foreach ($ArrayOfPlayers as $key => &$Player) {
$Skill = $Player->RatingsArray['Skill'];
if ($Skill < $WorstPlayerSkill) {
$WorstIndexPlayer = $key;
$WorstPlayerSkill = $Skill;
}
}
// Found the worst player in the list, so remove him.
unset($ArrayOfPlayers[$WorstIndexPlayer]);
}
正如你可能会说,我不明白我在这一点上做什么,不了解$关键部分是什么(它只是从其他的例子复制)。它仍然挂在PC上。
我该如何改正这个问题,或者有没有更好的方法来达到这个目的呢?
为了响应数据结构的请求,这里是一个只有2个玩家的转储,以显示它们如何安排。
Array
(
[0] => Player Object
(
[ID] => 1
[TeamID] => 1
[Name] => Joseph Dorrington
[RatingsArray] => Array
(
[Skill] => 51993
)
)
[1] => Player Object
(
[ID] => 2
[TeamID] => 1
[Name] => Oliver Tillyard
[RatingsArray] => Array
(
[Skill] => 64574
)
)
您可以发布的数据结构,请 – Kisaragi
更新的问题,显示的数据结构。希望这就是你想要的? – Farflame