首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这个循环总是产生N+1输出?

为什么这个循环总是产生N+1输出?
EN

Stack Overflow用户
提问于 2012-10-19 19:11:09
回答 6查看 95关注 0票数 0

假设我有这样的输入:

代码语言:javascript
复制
<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循环来处理这些输入

代码语言:javascript
复制
$i = 1;

do {
    $x = 'block-'.$i;
    $webBlock = $_POST[$x];
    //some codes here
    $i++;
}

while (!empty($webBlock));

为什么我总是有6个输出?最后一个是空白输出。似乎循环总是在做n+1。如何根据给定的输入数量来制作正确的循环?谢谢!

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-10-19 19:16:33

您需要while

我会这么说:

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

我认为这应该考虑到名为'block-n‘的项目。if语句基本上是这样说的:“如果block-出现在字段名称中的任何位置,则回显某某”。如果你得到一个错误,请让我知道,并将纠正。

票数 1
EN

Stack Overflow用户

发布于 2012-10-19 19:13:39

试试这个:

代码语言:javascript
复制
$i = 0;

do {
    $i++;
    $x = 'block-'.$i;
    $webBlock = $_POST[$x];
    //some codes here
}
while (!empty($webBlock));

更新:最好的方法是:

代码语言:javascript
复制
for ($i = 1; $i <= count($_POST); $i++) {
    $webBlock = $_POST['block-'.$i];
    //some code here
}
票数 1
EN

Stack Overflow用户

发布于 2012-10-19 19:13:59

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

代码语言:javascript
复制
while (!empty($webBlock)){
    $x = 'block-'.$i;
    $webBlock = $_POST[$x];
    //some codes here
    $i++;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12972994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档