У меня есть массив объектов, которые являются футболистами. Массив может содержать от нуля до тысячи игроков. Я хочу, чтобы уменьшить его до лучших 10. Моя первая попытка была следующей:Уменьшить массив объектов до 'best 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]);
}
Как вы можете сказать, я не понимаю, что я делаю в данный момент и не понимаю, что часть $ ключа для (это просто копируется из других примеров). Он все еще просто висит на ПК.
Как исправить это, или есть лучший способ достичь этого?
В ответ на запрос структуры данных, здесь находится свалка всего 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