1

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

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

4

3 回答 3

1

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

于 2013-01-21T05:18:41.100 回答
1

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

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

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

于 2013-01-21T06:18:42.680 回答
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数组,而不是每次迭代都创建一个新数组。

于 2013-01-21T06:19:36.937 回答