我有一个问题,我已经坚持了几个小时了。我玩过多种类型的 for() 和 while() 循环。我将它们放在具有不同变量的不同位置并运行不同的东西,没有任何效果..
我的问题:
为什么我的程序为第一个以下的所有用户提供相同级别?您可以在图片中清楚地看到 Nicolas 拥有更多的 XP。(5,000 xp 是 20 级,如果“Nic5”是数据库中的第一个,那么它会将“技能级别”更改为 20。
我知道返回的变量$lvl
对于每个加载的玩家都没有改变,这就是为什么每个玩家都获得第一个玩家的级别。
有人可以帮我吗?
注释:
0
= 包含玩家技能水平经验的列。
类计算级别:
class calculatelevel {
function level($skillnum)
{
$host = "*";
$user = "*";
$pass = "*";
$db = "*";
$con = new mysqli($host, $user, $pass, $db) or die($con->error);
$res = $con->query("SELECT `0` FROM hiscores");
$max = 99;
while($row = $res->fetch_assoc()) {
$xp = $row['0'];
// Find the appropriate level
for ($lvl = 1; $lvl < $max; $lvl++) //this for loop runs 99 times
{
if ($xp < $this->experience($lvl))//if players xp in skill is less than experience(level 1-99)
{
// Level found
$lvl -= 1;
break;
}
}
}
return $lvl;
}
public function experience($lvl)
{
$xp = 0;
for($x = 1; $x < $lvl; $x++)
{
$xp += floor($x + 300 * pow(2, ($x / 7)));
}
return floor($xp / 4);
}
}
将数据库信息写入页面的方法。
if($res->num_rows > 0) {
echo "<table>
<tr>
<td>Rank</td>
<td>Username</td>
<td>Skill Level</td>
<td>Total Exp</td> </tr>";
while($row = $res->fetch_assoc()) {
echo 'ran';
$calc = new calculatelevel();
$level = $calc->level(0);
echo '<tr>
<td>'.($count+1).'</td>
<td>'. htmlspecialchars($row['username']) .'</td>
<td>'.number_format($level).'</td>
<td>'.number_format($row['0']).'</td>
</tr>';
$count++;
}
}