Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
while循环中的PHP开关_Php_Html_Mysql_Foreach_Switch Statement - Fatal编程技术网

while循环中的PHP开关

while循环中的PHP开关,php,html,mysql,foreach,switch-statement,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["fir

我使用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;
}
}
while($row=$mySQL->Fetch())
{
交换机($filter)
{
案例1:
案例2:
$data[]=数组(150,$row[“lastName”]);
$data[]=数组(125,$row[“firstName”]);
$data[]=数组(100,$row[“城市]);
$data[]=数组(75,$row[“state”]);
$data[]=数组(100,FormatPhone($row[“phone”]);
$data[]=数组(125,$row[“registrationDate”]);
$data[]=数组(125,$row[“expirationDate”]);
$id=$row[“id”];
回声“;
打破
}
}
由于某种原因,名单还在不断增加。我一定忽略了一些显而易见的事情,但我就是找不到

以下是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>
    琼斯 鲍勃 城市 NH 宽度:100px(123)456-7890 2013-01-20 2014-07-31
  • Doe
  • 简 小镇 NH 宽度:100px(123)456-7890 2013-01-20 2014-07-31

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

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

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

while($row=$mySQL->Fetch()){
$data=array();
交换机($filter){
//案例陈述
这将在每次迭代开始时将$data重新初始化为空数组,确保您只为当前行创建列表项。

替换:

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

中断之前添加
unset($data);
尝试echo”“;打印($data)?
$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"]),
);