如何在PHP中多次使用mysqli结果行?

wKa*_*vey 1 php mysqli

我正在尝试整理一个工具,以帮助我即将到来的幻想曲棍球草案,同时也学习PHP.我试图在一个页面上创建多个列表,一个显示前10个可用的整体玩家,然后是其他按位置显示前10个可用玩家的列表.

这是我的SQL查询/代码

include 'db/connect.php';

$sql='SELECT * FROM players WHERE pick IS NULL';

$players=$conn->query($sql);

if($players === false) {
    trigger_error('Wrong SQL: ' . $sql . ' Error: ' . $conn->error, E_USER_ERROR);
} else {
    $rows_returned = $players->num_rows;
} 
Run Code Online (Sandbox Code Playgroud)

然后在页面后面我有一个while循环,生成一个包含前十名玩家的表

while ($row = $players->fetch_array()) {
    if ($i == 10) {
        break;
    }

    echo "<tr>";
    echo "<td>" . $row['Rank'] . "</td>";
    echo "<td>" . $row['Player'] . "</td>";
    echo "<td>" . $row['Team'] . "</td>";
    ...
Run Code Online (Sandbox Code Playgroud)

一切正常.但是,当我使用相同的方法生成仅包含特定位置(C,RW/LW等等)的列表时,它会从前10名玩家列表结束的位置开始.(请参阅我的意思:http://i.imgur.com/JApeftU.png)

我认为这与$players->fetch_array()我有关,但我不知道绕过它最好的方法是什么.

有任何想法吗?谢谢!

Ali*_*ice 6

与所有玩家一起填充行.

while ($row = $players->fetch_array()) {   //? $rows = $players->fetch_all();
    $rows[] = $row;
}
Run Code Online (Sandbox Code Playgroud)

您可以使用它count()来获得阵列中的玩家总数

$totalPlayers = count($rows);
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用for循环遍历数组

for($i = 0; $i < $totalPlayers; $i++){
    //echo out the stuff you want
    echo $rows[$i]['player'];
}
Run Code Online (Sandbox Code Playgroud)

或者只有十个

for($i = 0; $i < 10; $i++){
    //echo out the stuff you want
    echo $rows[$i]['player'];
}
Run Code Online (Sandbox Code Playgroud)