PHP切换到while循环内


PHP switch inside a while loop

我得到两个相同的条目从我的mysql数据库使用PHP开关。我把问题孤立到这里了,也许有人能迁就我一下?$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>

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

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

我相信你的答案在于PHP变量作用域的动态特性。注意到在使用$data之前不需要声明它吗?PHP假定您需要一个名为data的变量,并推断您需要一个数组,因为您使用[]对其进行了附加。在while循环的每次迭代中,您应该将行结果追加到$data,但是您从未告诉PHP您需要一个'new' $data变量。我建议像下面这样明确地声明$data:

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

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

Replace:

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