次の表があります。
<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 />
私は何を間違っていますか?
<?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 />';
}
}
?>
これは機能します。値が配列であるため、最初のソリューションは配列を出力しようとしています。
Foreachループは問題なく機能しますが、単純に
print_r($_POST);
または、ブラウザできれいに印刷するには:
echo "<pre>";
print_r($_POST);
echo "</pre>";
$ _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
配列が対称的であるため機能します。要素の数が異なる場合は、別のアプローチをとる必要があります。
$_POST
の最初の要素として$myarray
配列を追加しています。参照したい場合は、次のようにしてください。
$myarray = $_POST;
ただし、スクリプトで$_POST
を介して呼び出すことができるため、これはおそらく必要ありません。
なぜ$_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) {
// ...
}
ネストされた配列があるため、実際には再帰的なアプローチをお勧めします。
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 );
最近この「破裂」に遭遇しました。
配列を出力するのに役立ちます。 http://in2.php.net/implode
echo 'Variables: ' . implode( ', ', $_POST);
ただ:
foreach ( $_POST as $key => $value) {
echo "<p>".$key."</p>";
echo "<p>".$value."</p>";
echo "<hr />";
}
$_POST
はそれ自体で配列であり、配列を作成する必要はありません。あなたがやったことは$_POST
新しい配列内の配列。これがArray
を印刷する理由です。それを次のように変更します。
foreach ($_POST as $key => $value) {
echo "<p>".$key."</p>";
echo "<p>".$value."</p>";
echo "<hr />";
}
$ _POSTはすでに配列です。これを試して:
foreach ($_POST as $key => $value) {
echo "<p>".$key."</p>";
echo "<p>".$value."</p>";
echo "<hr />";
}