而在里面虽然PHP

时间:2012-05-20 09:34:56

标签: php list while-loop

我们试图在while循环中放一段时间。 第一次运行时,结果显示在列表中(139,140,​​141)。 第二个列表只显示一个值(1ste troop)。 结果如下:
139
1ste troop
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>";

1 个答案:

答案 0 :(得分:2)

内部循环在fetch_assoc返回false后停止...但是这表示所有找到的结果的结束,并且没有任何行留给下一次迭代。

您应该将$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查询中添加一些过滤,因为您只使用了返回行的一部分,这意味着其余行将从数据库发送到您的代码中原因,浪费时间和带宽。