0

假设我有这个输入:

<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。如何根据给定的输入数量制作正确的循环?谢谢!

4

6 回答 6

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
}
于 2012-10-19T11:13:39.113 回答
1

因为您使用的是重复循环,所以应该使用 while 循环:

while (!empty($webBlock)){
    $x = 'block-'.$i;
    $webBlock = $_POST[$x];
    //some codes here
    $i++;
}
于 2012-10-19T11:13:59.123 回答
1

因为 do 将至少执行一次 while 表达式中可能存在的内容。do while is an exit control loop.

于 2012-10-19T11:14:28.383 回答
1

你需要while吗?

我会去:

$i=0;
foreach($_POST as $name => $value)
{
   if( strpos($name , 'block-') !== false ) echo $i . " - " . $name . ": " . $value;
   $i++;
}

相信应该占名为' block-n'的项目。该if声明基本上说“如果block-在该字段名称中的任何位置,则回显出某某”。如果您遇到错误,请告诉我,并会修改。

于 2012-10-19T11:16:32.817 回答
0

我不是 PHP 开发人员,所以我只会让您大致了解您在做什么。

实际上,您正在使用Do-while循环,有时称为退出控制循环。因此,在执行代码后 Do-While 的情况下,将检查您的条件。因此,即使您没有在“webBlock”中获得任何价值,您的代码也会被执行。所以,这是你的错误。

而不是这个,你可以使用 While循环,入口控制循环。当且仅当条件为真时,您的代码才会执行​​。

$i = 1;
while (i>0) {
     $x = 'block-'.$i;
     $webBlock = $_POST[$x];
    if(empty($webBlock))
    {
      break;
   }
   $i++;
}
于 2012-10-19T11:35:11.777 回答
0

因为您正在使用Do While loop。我不确定您的数据,但我必须说它会按照您的预期再执行一次。让我们通过迭代来检查它
它将第一次运行,因为$webBlock它不是空的,并且与 5 次相同。
现在在这里你想关闭循环,但你的第 5 次迭代的条件为真。现在它将再次执行并且什么都不显示(因为 $webBlock 中没有任何内容)现在条件会发现它$webBlock是空的。
我建议你在这里使用while loop它会解决你的问题

于 2012-10-19T11:16:28.863 回答