Как мне перебрать массив и удалить ключ с наименьшим значением

#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, затем сбросьте его.

Ссылка: