我在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()提供的参数无效
谢谢!
答案 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"];
}