PHP在一个while循环中切换

时间:2013-01-21 05:12:09

标签: php html mysql foreach switch-statement

我使用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>

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

3 个答案:

答案 0 :(得分:1)

在第一次迭代中添加第一次后发生了什么,对于下一次迭代,它再次将下一个元素放在$data中并且正如您使用的那样$data[]= $next_element以前的数据没有得到从$ data数组中删除,所以在每次迭代后,取消设置数组。这应该可以。

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

替换:

$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数组,而不是每次迭代都创建一个新数组。

相关问题