Foreach循环会收到所有$ _POST输入,如何使其更具体?

时间:2012-10-19 12:00:49

标签: php

我在HTML端有这个代码:

<form action="testx.php" method="post">
<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"/>

<input type="hidden" name="title" value="title goes here"/>
<input type="hidden" name="code" value="018439128484"/>
<input type="submit" value="Finish!" class="submit-btn" />
</form>

我在PHP端有这个Foreach循环:

<?php
$i=0;
foreach($_POST as $name => $value)
{
   echo $i . " - " . $name . ": " . $value . "<br>";
   $i++;
}  
?>

不幸的是,Foreach循环继续进行所有输入...如何使此循环仅进行名称为“block-X”的输入?

我试着尝试这样,但失败了:

$i=0;
$x = 'block-'.$i+1;
foreach($_POST[$x] as $name => $value)

它说:警告:为foreach()提供的参数无效

谢谢!

3 个答案:

答案 0 :(得分:4)

尝试在循环内按$name进行过滤,例如使用strpos

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

答案 1 :(得分:2)

我现在看到的唯一方法是:

foreach($_POST as $name => $value)
{
   if(substr($name, 0, 5) == "block"){
    echo $i . " - " . $name . ": " . $value . "<br>";
    $i++;
  }
}

编辑:有人比我快:x

另一种避免字符串比较的解决方案

while(isset($_POST["block-".$i])){
  echo $i . " - block-" . $i . ": " . $_POST["block-".$i] . "<br>";
  $i++;
}

答案 2 :(得分:1)

所有其他答案都是错误的。

您有5个您感兴趣的特定指标。它们是数字和连续的。你想要从1迭代到5.你想要遍历整个$_POST数组,有选择地跳过键,你绝对不希望在这样一个微不足道的任务中涉及正则表达式。每个使用正则表达式来解决这个问题的答案都是错误的,使用strpos的答案并没有那么好。

使用此:

for ($i = 1; $i <= 5; ++$i) {
   echo "$i = block-$i: ", $_POST["block-$i"];
}