我有一个表格中的数组,其中包含“块”信息,如
$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++;
}
但我一直陷入无限循环。我哪里错了?
答案 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吗?你的意思是更新吗?