-1

我有一个表单中的数组,其中包含“块”信息,例如

$array = array(id1 => 1
                title1 => this title
                id2 => 2
                title2 => this title 2)

我正在尝试像这样循环遍历数组

$num = 1;
$posid = "id" . $num;
while (array_key_exists($posid, $_POST)) {
    echo $posid . "<br>";
    $num++;
}

但我一直陷入无限循环。我哪里错了?

4

3 回答 3

1

你的问题是你没有$posid在循环中重新定义。你应该做这个:

$num = 1;
$posid = "id" . $num;
while (array_key_exists($posid, $_POST)) {
    echo $posid . "<br>";
    $num++;
    $posid = "id" . $num;
}

然而,我会建议一种完全不同的方法。任何时候你发现自己发布这样的变量:

id1
id2
id3
...

您可能更适合在输入字段中使用数组访问表示法。

<input name="id[]" ... />

这将允许 PHP 将具有该名称的字段中的所有值聚合到 POST 中的数组中。

然后你可以做类似的事情

foreach ($_POST['id'] as $id) {
   ...
}
于 2013-05-01T17:56:51.293 回答
1

您需要$posid在递增后更新$num

$num = 1;
$posid = "id" . $num;
while (array_key_exists($posid, $_POST)) {
    echo $posid . "<br>";
    $num++;
    $posid = "id" . $num;
}

如果您使用数组表示法命名表单字段可能会更好,例如<input name="id[]" ...>. 然后$_POST['id']将是一个数组,而不是单独的元素。

于 2013-05-01T17:57:36.270 回答
0

您处于无限循环中,因为如果它存在于数组中,则永远不会其从数组中删除,也永远不会更新被询问变量的值。

因此,每次对while循环进行评估时,都会true因为重复测试相同的条件。

你的意思是从数组中删除 $posid 吗?你的意思是更新吗?

于 2013-05-01T17:54:43.947 回答