循环,而数组键存在PHP

时间:2013-05-01 17:53:23

标签: php arrays while-loop key

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

$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++;
}

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

3 个答案:

答案 0 :(得分: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) {
   ...
}

答案 1 :(得分: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']将是一个数组,而不是单独的元素。

答案 2 :(得分:0)

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

因此,每次while循环得到评估时,它都是true,因为它是重复测试的相同条件。

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