web-dev-qa-db-ja.com

$ _POST配列をprint_rする方法?

次の表があります。

<form method="post" action="test.php">
  <input name="id[]" type="text" value="ID1" />
  <input name="value[]" type="text" value="Value1" />
  <hr />

  <input name="id[]" type="text" value="ID2" />
  <input name="value[]" type="text" value="Value2" />
  <hr />

  <input name="id[]" type="text" value="ID3" />
  <input name="value[]" type="text" value="Value3" />
  <hr />

  <input name="id[]" type="text" value="ID4" />
  <input name="value[]" type="text" value="Value4" />
  <hr />

  <input type="submit" />
</form>

そしてtest.phpファイル

<?php 

  $myarray = array( $_POST);
  foreach ($myarray as $key => $value)
  {
    echo "<p>".$key."</p>";
    echo "<p>".$value."</p>";
    echo "<hr />";
  }

?>

しかし、それはこれを返すだけです:<p>0</p><p>Array</p><hr />

私は何を間違っていますか?

8
Iladarsda
<?php 

 foreach ($_POST as $key => $value) {
  echo '<p>'.$key.'</p>';
  foreach($value as $k => $v)
  {
  echo '<p>'.$k.'</p>';
  echo '<p>'.$v.'</p>';
  echo '<hr />';
  }

} 

 ?>

これは機能します。値が配列であるため、最初のソリューションは配列を出力しようとしています。

13
Senad Meškin

Foreachループは問題なく機能しますが、単純に

print_r($_POST);

または、ブラウザできれいに印刷するには:

echo "<pre>";
print_r($_POST);
echo "</pre>";
26
billrichards

$ _POSTはすでに配列なので、array()で囲む必要はありません。

代わりにこれを試してください:

<?php 

 for ($i=0;$i<count($_POST['id']);$i++) {

  echo "<p>".$_POST['id'][$i]."</p>";
  echo "<p>".$_POST['value'][$i]."</p>";
  echo "<hr />";

} 

 ?>

注:これは、idおよびvalue配列が対称的であるため機能します。要素の数が異なる場合は、別のアプローチをとる必要があります。

5
Brian Driscoll

$_POSTの最初の要素として$myarray配列を追加しています。参照したい場合は、次のようにしてください。

$myarray = $_POST;

ただし、スクリプトで$_POSTを介して呼び出すことができるため、これはおそらく必要ありません。

2

なぜ$_POST配列内の配列?

次のようにして、「id」配列と「value」配列にアクセスできます

// assuming the appropriate isset() checks for $_POST['id'] and $_POST['value']

$ids = $_POST['id'];
$values = $_POST['value'];

foreach ($ids as $idx => $id) {
    // ...
}

foreach ($values as $idx => $value) {
    // ...
}
2
Phil

ネストされた配列があるため、実際には再帰的なアプローチをお勧めします。

function recurse_into_array( $in, $tabs = "" )
{
    foreach( $in as $key => $item )
    {
        echo $tabs . $key . ' => ';
        if( is_array( $item ) )
        {
            recurse_into_array( $item, $tabs . "\t" );
        }
        else
        {
            echo $tabs . "\t" . $key;
        }
    }
}

recurse_into_array( $_POST );
1
cwallenpoole

最近この「破裂」に遭遇しました。

配列を出力するのに役立ちます。 http://in2.php.net/implode

echo 'Variables: ' . implode( ', ', $_POST);
1

ただ:

foreach ( $_POST as $key => $value) {

  echo "<p>".$key."</p>";
  echo "<p>".$value."</p>";
  echo "<hr />";

} 
1
Headshota

$_POSTはそれ自体で配列であり、配列を作成する必要はありません。あなたがやったことは$_POST新しい配列内の配列。これがArrayを印刷する理由です。それを次のように変更します。

foreach ($_POST as $key => $value) {

  echo "<p>".$key."</p>";
  echo "<p>".$value."</p>";
  echo "<hr />";

} 
0
klennepette

$ _POSTはすでに配列です。これを試して:

foreach ($_POST as $key => $value) {
    echo "<p>".$key."</p>";
    echo "<p>".$value."</p>";
    echo "<hr />";
} 
0
mingos