【问题标题】:Creating multiple while loops for one array in php and mysqli在 php 和 mysqli 中为一个数组创建多个 while 循环
【发布时间】:2015-01-23 09:57:17
【问题描述】:

所以我正在尝试创建一个列表,以显示属于某个区域的所有用户。为此,我尝试使用一个 while 循环,它将显示所有名称。见以下代码:

<h2>Region 2:</h2>
<?php 

          //REGION 2:
          $result = mysqli_query($ExampleDB,"SELECT * FROM members WHERE region=2 ORDER BY user DESC");

            while($row = mysqli_fetch_array($result))
              {
              echo "</br>Position 2: ";
              if ($row['position']==2){
              echo"".$row['fname']." ".$row['sname'].", ";
              }
              echo "</br>Position 3: ";
              if ($row['position']==3){
              echo"".$row['fname']." ".$row['sname'].", ";
              }
              }
          mysqli_close($dbConnection);
          }
?>

唯一的问题是,它显然还会为每个用户回显“位置 2”和“位置 3”......关于如何拆分这两个位置的任何建议,以便在回声?我也尝试像这样拆分 while 循环,但没有出现任何名称:

              $result = mysqli_query($ExampleDB,"SELECT * FROM members WHERE region=2 ORDER BY user DESC");

              echo "</br></br>Position 2: ";
              while($row2 = mysqli_fetch_array($result))
              {
                  if ($row2['position']==2){
                  echo"".$row2['fname']." ".$row2['sname']." ".$row2['user'].", ";
                  }
              }           
              echo "</br></br>Position 3: ";
              while($row3 = mysqli_fetch_array($result))
              {
                  if ($row3['position']==3){
                  echo"".$row['fname']." ".$row['sname'].", ";
                  }
              }

我还尝试将它们全部保留为 $row 并且也没有产生任何名称。如何拆分while循环?或者有没有更好的方法在 Position 2,3 标头之后回显数组中的特定名称?

【问题讨论】:

  • 我注意到您在第一个示例中使用$row['position']==2,在第二个示例中使用$row2['f_pos']==2。不过不确定这是否是个问题。
  • oops 只是简化了措辞,忘记在第二次更改它。它们在我的实际代码中是相同的。在编辑中修复
  • @user1066035 我也有同样的问题,请问给出的答案解决了吗?

标签: php arrays mysqli while-loop


【解决方案1】:
$result = mysqli_query($ExampleDB,"SELECT * FROM members WHERE region=2 ORDER BY user DESC");

echo "</br></br>Position 2: ";
while($row2 = mysqli_fetch_array($result))
{
    if ($row2['position']==2)
    {
         echo"".$row2['fname']." ".$row2['sname']." ".$row2['user'].", ";
    }
}   

$result = mysqli_query($ExampleDB,"SELECT * FROM members WHERE region=2 ORDER BY user DESC");

echo "</br></br>Position 3: ";
while($row3 = mysqli_fetch_array($result))
{
     if ($row3['position']==3)
     {
        echo"".$row['fname']." ".$row['sname'].", ";
     }
}

如果您再次查询该语句,这实际上可以正常工作。在第一个 while 循环 fetch 数组到达数组末尾之后。并且执行 fetch array 什么都不返回。因此,您必须再次查询。

【讨论】:

  • 可能不漂亮,但对我有用。干杯!将尽可能选择作为答案:)
  • 好吧,这里漂亮的东西可以放在第一个 while 循环之前 $result2=$result 并在你的第二个 while 循环中使用 $result2。这样可以避免在mysql上再次查询。如果您有更多更大的数据,请考虑它。您还可以使用 mysql_data_seek( $result, 0 ); 重置 mysqli_fetch_array;声明
  • 我认为他也可以简单地使用php.net/manual/en/mysqli-result.data-seek.php$result-&gt;data_seek(0);将结果指针重置回开头而不是再次执行mysqli_query?请注意我自己,从未尝试过。
【解决方案2】:

您可以在第一次输出标头后设置一个标志。这并不理想,但可以避免重新设计您的方法:

$pos_two_header = true;
$pos_three_header = true;

while($row = mysqli_fetch_array($result))
    {
        if ($row['position']==2){
            if($pos_two_header) {
                echo "</br>Position 2: ";
                $pos_two_header = false;
             }
            echo"".$row['fname']." ".$row['sname'].", ";
        }
        if ($row['position']==3){
            if($pos_three_header) {
                echo "</br>Position 2: ";
                $pos_three_header = false;
             }
            echo"".$row['fname']." ".$row['sname'].", ";
        }
  }

【讨论】:

    【解决方案3】:

    根据 Jeroen 关于使用 data_seek 而不是第二次运行查询的评论,这将起作用,但不像简单地寻找 0 索引那么容易。使用 PHP 5.4 处理这个解决方案要容易得多,其中结果集作为 Traversable 返回。像这样:

    $result = $ExampleDB->query("SELECT * FROM members WHERE region=2 ORDER BY user DESC");
    
    foreach($result as $row)
        {
            echo "</br>Position 2: ";
            if ($row['position']==2){
                echo"".$row['fname']." ".$row['sname'].", ";
            }
        }
    
    $result->field_seek(0);
    
    foreach($result as $row)
        {
            echo "</br>Position 3: ";
            if ($row['position']==3){
                echo"".$row['fname']." ".$row['sname'].", ";
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-16
      • 2018-03-30
      • 2021-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多