说这张桌子:
用户
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
但是我想要的只是随机显示其中之一。如何限制只显示一行?
答案 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;
}
}