在里面,而 php


While inside while php

我们试图在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查询添加一些筛选,因为您只使用返回行的一部分,这意味着其余行无缘无故地从数据库发送到您的代码,浪费时间和带宽。