0

我在 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() 提供的参数无效

谢谢!

4

3 回答 3

4

尝试$name在循环内过滤,例如strpos

<?php
$i=0;
foreach($_POST as $name => $value)
{
   if(strpos($name, 'block-')===0) {
      echo $i . " - " . $name . ": " . $value . "<br>";
      $i++;
   }
}  
?>
于 2012-10-19T12:02:52.463 回答
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++;
}
于 2012-10-19T12:04:25.550 回答
1

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

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

用这个:

for ($i = 1; $i <= 5; ++$i) {
   echo "$i = block-$i: ", $_POST["block-$i"];
}
于 2012-10-19T14:31:45.567 回答