【问题标题】:PHP switch inside a while loopPHP在while循环内切换
【发布时间】:2013-01-21 05:12:08
【问题描述】:

我使用 PHP 开关从我的 mysql 数据库中获得了两个相同的条目。我已经把问题隔离到这里了,也许有人可以放纵我? $mySQL->Fetch() 只是获取查询中的下一行。

这是我正在使用的:

while($row = $mySQL->Fetch())
{
switch($filter)
{
    case 1:
    case 2:
        $data[] = array(150, $row["lastName"]);
        $data[] = array(125, $row["firstName"]);
        $data[] = array(100, $row["city"]);
        $data[] = array(75, $row["state"]);
        $data[] = array(100, FormatPhone($row["phone"]));
        $data[] = array(125, $row["registrationDate"]);
        $data[] = array(125, $row["expirationDate"]);
        $id = $row["id"];

        echo "<a href=\"?dp=profile&filter=member&id=$id\"><ul class=\"search\">";
        foreach($data as $key => $value)
        {
             echo "<li style=\"width:$value[0]px\">$value[1]</li>";
        }
        echo "</ul></a>";
        break;
}
}

由于某种原因,列表不断增加。我一定忽略了一些明显的东西,但我就是找不到。

这是 HTML 输出的内容:

<ul class="search">
    <li style="width:150px">Jones</li>
    <li style="width:125px">Bob</li>
    <li style="width:100px">City</li>
    <li style="width:75px">NH</li>
    <li style="width:100px">(123) 456-7890</li>
    <li style="width:125px">2013-01-20</li>
    <li style="width:125px">2014-07-31</li>
    <li style="width:150px">Doe</li>
    <li style="width:125px">Jane</li>
    <li style="width:100px">Little Town</li>
    <li style="width:75px">NH</li>
    <li style="width:100px">(123) 456-7890</li>
    <li style="width:125px">2013-01-20</li>
    <li style="width:125px">2014-07-31</li>
</ul>

不是只有一个,而是结合了两个。但是我确保关闭了我的无序列表标签。更不用说,此后的每个条目的大小都在继续增长,并结合了迄今为止的所有条目。我每次都需要清除查询吗?谢谢

【问题讨论】:

  • break;之前添加unset($data);
  • 已经尝试过 echo "
    ";print_r($data); ?

标签: php html mysql foreach switch-statement


【解决方案1】:

发生的事情是在第一次迭代中添加第一次之后,对于下一次迭代,它再次将下一个元素放入 $data 并且当您使用 $data[]= $next_element 时,以前的数据不会从 $data 中删除数组,因此在每次迭代后,取消设置数组。这应该可以工作。

【讨论】:

    【解决方案2】:

    我相信您的答案在于 PHP 变量范围的动态特性。请注意您不必在使用 $data 之前声明它吗? PHP 假设您想要一个名为 data 的变量,并推断您想要一个数组,因为您使用 [] 附加到它。在 while 循环的每次迭代中,您都应该将行结果附加到 $data 中,但您从未告诉 PHP 您想要一个“新的”$data 变量。我建议如下明确声明 $data:

    while ($row = $mySQL->Fetch()) {
        $data = array();
        switch ($filter) {
            // case statements
    

    这将在每次迭代开始时将 $data 重新初始化为一个空数组,确保您只为当前行创建列表项。

    【讨论】:

      【解决方案3】:

      替换:

      $data[] = array(150, $row["lastName"]);
      $data[] = array(125, $row["firstName"]);
      $data[] = array(100, $row["city"]);
      $data[] = array(75, $row["state"]);
      $data[] = array(100, FormatPhone($row["phone"]));
      $data[] = array(125, $row["registrationDate"]);
      $data[] = array(125, $row["expirationDate"]);
      

      与:

      $data = array(
          array(150, $row["lastName"]);
          array(125, $row["firstName"]),
          array(100, $row["city"]),
          array(75, $row["state"]),
          array(100, FormatPhone($row["phone"])),
          array(125, $row["registrationDate"]),
          array(125, $row["expirationDate"]),
      );  
      

      您每次迭代都会改变单个 $data 数组,而不是每次迭代都创建一个新数组。

      【讨论】:

        猜你喜欢
        • 2021-10-22
        • 2020-08-13
        • 2012-12-02
        • 2021-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-24
        • 1970-01-01
        相关资源
        最近更新 更多