#php #arrays #numbers #associative-array
#php #массивы #числа #ассоциативный-массив
Вопрос:
Я пытаюсь создать программу, в которой разные игроки в массиве назначаются случайными числами. Он основан на раундах, поэтому в каждом раунде игрокам присваиваются новые случайные числа, а игрок (ы) с наименьшим числом удаляется из массива.
Проблема в том, что при повторении он не удаляет игрока с наименьшим номером из массива. Однако он выводит проигрыватель с наименьшим номером, но это все…
Я хочу, чтобы он удалял игрока или игроков и отображал их имена в каждом раунде, пока не останется один.
Я новичок в изучении PHP, поэтому моя структура кода не самая лучшая xd
$players = array(
"Peter" => "0",
"John" => "0",
"Harold" => "0",
"Alexander" => "0",
"Thor" => "0",
"Paul" => "0",
"Jimmy" => "0",
"Erik" => "0",
"Donald" => "0",
"Matthew" => "0"
);
for($i = 0; $i < count($players); $i ){
echo "<br>" . "<b>Round ". (1 $i) ."</b><br>";
foreach($players as $key => $value){
//generating random number to value
$value = rand(1,50);
asort($players);
//Assigning each player a random number
$players[$key]=$value;
$min = min($players);
array_splice($players,$min));
}
echo "Player(s) with lowest number is: " .current(array_keys($players, min($players)));
echo "<br>"
}
Ответ №1:
Вместо использования for-loop
я предлагаю вам использовать while
like:
$players = array(
"Peter" => "0",
"John" => "0",
"Harold" => "0",
"Alexander" => "0",
"Thor" => "0",
"Paul" => "0",
"Jimmy" => "0",
"Erik" => "0",
"Donald" => "0",
"Matthew" => "0"
);
$round = 1;
while (count($players) > 1) {
echo "<br>" . "<b>Round " . $round . "</b><br>";
foreach ($players as $key => $value) {
do {
$value = rand(1, 50);
} while(in_array($value, $players));
$players[$key] = $value;
}
$key = array_keys($players, min($players))[0];
echo "Player(s) with lowest number is: " . $key;
echo "<br>";
unset($players[$key]);
$round ;
}
echo '<br>The winner is:'. key($players);
Что я изменил?
- Используйте
while
с логикой «продолжить, пока количество массивов не равно единице» (так что просто победитель - Используйте
do-while
для генерации разного номера для каждого игрока (уникальный номер) - найдите
min()
массив of, затем сбросьте его.
Ссылка: