我有一組對象,它們是足球運動員。數組可以包含從零到數千個玩家的任何東西。我想將其降低到最好的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