我们试图在while循环中放一个while。第一个同时运行,结果显示在列表(139,140,141(中。第二个列表只显示一个值(1ste troop(。这些是结果:
139 1 部队
140 141
所以似乎第二个时间只执行一次。我该怎么做才能解决这个问题?
echo "<ul>";
while($user = $allUsersintroops->fetch_assoc())
{
if($user['userid'] == $_SESSION['userid'])
{
echo "<li>" . $user['troopid']. " </li>";
while ($mytroops = $alltroops->fetch_assoc())
{
if($user['troopid'] == $mytroops['troopid'])
{
echo "<li>" . $mytroops['description']. " </li>";
}
}
}
}
echo "</ul>";
一旦返回 false,内部循环就会停止fetch_assoc
...但这表示所有找到的结果的结束,并且它没有任何行留给下一次迭代。
您应该将$alltroops
中的所有行收集到数组中一次,然后迭代该行:
echo "<ul>";
$allTroopsList = array();
while ($mytroops = $alltroops->fetch_assoc()) {
$allTroopsList []= $mytroops;
}
while($user = $allUsersintroops->fetch_assoc()) {
if($user['userid'] == $_SESSION['userid']) {
echo "<li>" . $user['troopid']. " </li>";
foreach($allTroopsList as $mytroops) {
if($user['troopid'] == $mytroops['troopid']) {
echo "<li>" . $mytroops['description']. " </li>";
}
}
}
}
echo "</ul>";
此外,您应该考虑向$allUsersintroops
查询添加一些筛选,因为您只使用返回行的一部分,这意味着其余行无缘无故地从数据库发送到您的代码,浪费时间和带宽。