我使用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>
而不是一个,它结合了两个。但我确保关闭我的无序列表标签。更不用说,此后的每个条目继续增长,到目前为止所有条目的组合。我每次都需要清除查询吗?感谢
答案 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
数组,而不是每次迭代都创建一个新数组。