私は今、数時間立ち往生している質問があります。さまざまな種類の for() および while() ループをいじってみました。それらをさまざまな変数でさまざまな場所に配置し、さまざまなことを実行しましたが、何も機能しませんでした..
私の質問:
私のプログラムが最初のユーザーより下のすべてのユーザーに同じレベルを与えているのはなぜですか? 写真を見ると、Nicolas の方がはるかに多くの XP を持っていることがはっきりとわかります。(5,000 xp はレベル 20 であり、「Nic5」がデータベースの最初にある場合、「スキル レベル」が 20 に変更されます。
返される変数$lvl
は、読み込まれる各プレーヤーで変化しないことがわかっています。これが、各プレーヤーが最初のプレーヤーのレベルを取得する理由です。
誰でもこれで私を助けてくれますか?
注:
0
= プレイヤーのスキル レベルの経験を保持する列。
クラス calculatelevel :
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++;
}
}