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まで反復処理したい。選択的にキーをスキップして配列全体を反復処理したくなく、そのような単純なタスクに正規表現を絶対に使用したくありません。これを解決するために正規表現を使用するすべての回答は完全に間違っており、使用する回答はそれほど良くありません。$_POSTstrpos

これを使って:

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