如何在while语句中仅从表中打印一行?

时间:2019-01-11 15:45:48

标签: php mysqli while-loop

说这张桌子:

用户

id | username          | highest_score 
1  | detectivepikachu  | 1000          
2  | fullmetaljacket   | 4000          
3  | sonicthegreat     | 8000
4  | inspectorgadget   | 2000
5  | themartian        | 8000

我需要遍历所有用户的最高分,并选择得分最高至5000的那些。我正在使用while循环。

while($user = $user_result-> fetch_assoc()){

if($user['highest_score'] >= 5000){
echo $user['username'];
echo '<br>';
}

}

此while语句将起作用并显示

sonicthegreat 
themartian 

但是我想要的只是随机显示其中之一。如何限制只显示一行?

5 个答案:

答案 0 :(得分:0)

这只会回显分数等于或高于5000的第一个用户:

while($user = $user_result->fetch_assoc())
{
    if($user['highest_score'] >= 5000)
    {
        echo $user['username'];
        break;
    }
}

答案 1 :(得分:0)

这是完成的方式。您需要首先将获胜者放在一个新的数组中,然后选择一个随机数来选择一个随机玩家。

<?php
$user[] = ["id" => 1, "username" => "detectivepikachu", "highest_score" => 1000];
$user[] = ["id" => 2, "username" => "fullmetaljacket", "highest_score" => 4000];
$user[] = ["id" => 3, "username" => "sonicthegreat", "highest_score" => 8000];
$user[] = ["id" => 4, "username" => "inspectorgadget", "highest_score" => 2000];
$user[] = ["id" => 5, "username" => "themartian", "highest_score" => 8000];


$nb_user = count($user);
$array_score = array();
while($nb_user > 0){
    $nb_user--;
    if($user[$nb_user]['highest_score'] >= 5000){
        $array_score[] = [$user[$nb_user]['username']];
    }
}

$rand = rand(0, count($array_score) -1);
echo $array_score[$rand][0];

答案 2 :(得分:0)

其他答案不会随机选择一个结果,这是您可以使其随机选择一个的方法。

遍历所有用户,并将所有得分高于5000的用户添加到数组中。

$high_scores = array();

//foreach instead of while is better for arrays
//or you can use while($user = $user_result->fetch_assoc()){
foreach($users as $user) {
    if($user['highest_score'] >= 5000) {
        $high_scores[] = $user;
    }
}

//choose a random number between 0 and the amount of highscores (-1 to account for arrays starting at 0)
echo $high_scores[rand(0, count($high_scores)-1)]['username'];

一旦它们位于数组中(如您在代码中所见),就可以使用rand()函数来随机选择其中一个用户。 rand()的最小值应为0,因为数组从索引0开始,最大值应为数组-1中的条目数量(因为在具有3个条目的数组中,最后一个将为索引2 )

答案 3 :(得分:-1)

在这里我不会使用while循环,而是在foreach循环中使用if语句,如果if得分大于5000,则使用if语句分配$ variable。这是您可以做到的方式。

这会将$highscoreHolder设置为最后一次找到得分大于5000的数字。

$highscoreHolder = array();

foreach($users as $user) {
    if($user['highest_score'] >= 5000) {
        $highscoreHolder = $user;
    }
}

echo $highscoreHolder['username'];

希望这会有所帮助!

答案 4 :(得分:-1)

您可以在打印后简单地跳出while循环。

while($user = $user_result->fetch_assoc()){

    if($user['highest_score'] >= 5000){
        echo $user['username'];
        echo '<br>';
        break;
    }
}