假设我有这样的输入:
<input type="hidden" name="block-1" value="001"/>
<input type="hidden" name="block-2" value="012"/>
<input type="hidden" name="block-3" value="002"/>
<input type="hidden" name="block-4" value="005"/>
<input type="hidden" name="block-5" value="008"/>
我希望使用这个PHP循环处理这些输入
$i = 1;
do {
$x = 'block-'.$i;
$webBlock = $_POST[$x];
//some codes here
$i++;
}
while (!empty($webBlock));
为什么我总是有6个输出?最后一个是空白输出。似乎循环总是做n + 1。如何根据给定的输入数量进行正确的循环?谢谢!
答案 0 :(得分:1)
试试这个:
$i = 0;
do {
$i++;
$x = 'block-'.$i;
$webBlock = $_POST[$x];
//some codes here
}
while (!empty($webBlock));
UPD :最好的方法是:
for ($i = 1; $i <= count($_POST); $i++) {
$webBlock = $_POST['block-'.$i];
//some code here
}
答案 1 :(得分:1)
因为你正在使用重复循环,所以你应该使用while循环:
while (!empty($webBlock)){
$x = 'block-'.$i;
$webBlock = $_POST[$x];
//some codes here
$i++;
}
答案 2 :(得分:1)
因为表达时至少会执行一次。do while is an exit control loop.
答案 3 :(得分:1)
您需要while
吗?
我会选择:
$i=0;
foreach($_POST as $name => $value)
{
if( strpos($name , 'block-') !== false ) echo $i . " - " . $name . ": " . $value;
$i++;
}
相信应该考虑名为“block-n
”的项目。 if
语句基本上表示“如果block-
在字段名称中的任何位置,则回显出这样的”。
如果您收到错误并要修改,请告诉我。
答案 4 :(得分:0)
因为您使用的是Do While loop
。我不确定您的数据,但我必须说它会再次按预期执行。让我们通过迭代检查它
它将首次运行,因为$webBlock
不为空并且与5次相同。
现在你想要关闭循环,但你的第5次迭代的条件变为true。现在它将再次执行并且不显示任何内容(因为$ webBlock中没有任何内容)现在条件会发现$webBlock
为空。
我建议你在这里使用while loop
。它会解决你的问题
答案 5 :(得分:0)
我不是PHP开发人员,因此我只会让您大致了解自己在做什么。
实际上你正在使用Do-while
循环,有时也称为退出控制循环。因此,如果Do-While执行代码后,将检查您的条件。所以,即使你没有在'webBlock'中获得任何价值,你的代码也会被执行。所以,这是你的错误。
而不是这个,您可以使用While
循环,Entry控制循环。当且仅当条件为真时才执行代码。
$i = 1;
while (i>0) {
$x = 'block-'.$i;
$webBlock = $_POST[$x];
if(empty($webBlock))
{
break;
}
$i++;
}