簡體   English   中英

如何遍歷數組,並刪除具有最低值的鍵

[英]How do I loop through an Array, and remove the key with lowest value

我正在嘗試制作一個程序,該程序在分配有隨機數的數組中具有不同的玩家。 它是基於回合的,因此每一輪玩家都會被分配新的隨機數,並且從數組中刪除數字最小的玩家。

問題是迭代時它不會從數組中刪除具有最低數字的播放器。 然而,它確實會打印出數字最低的玩家,但就是這樣......

我希望它刪除一個或多個玩家並在每一輪顯示他們的名字,直到剩下一個。

我是學習 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>"
        }

我建議您使用while代替for-loop

$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()然后取消設置。

參考:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM