Как print_r $ _POST массив?

У меня есть следующая таблица.

<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 уже является массивом, поэтому вам не нужно обертывать массив () вокруг него.

Попробуйте это вместо этого:

 <?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 симметричны. Если у них было разное количество элементов, тогда вам нужно будет использовать другой подход.

Просто:

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

Вы добавляете массив $_POST в качестве первого элемента в $myarray . Если вы хотите ссылаться на него, просто выполните:

 $myarray = $_POST; 

Однако это, вероятно, не нужно, так как вы можете просто называть это через $_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) { // ... } 

В последнее время произошел этот «взрыв».

Может оказаться полезным для вывода массивов. http://in2.php.net/implode

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

$_POST – это массив, в котором вам не нужно выделять массив. То, что вы сделали, – это $_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 />"; } 

Поскольку у вас есть вложенные массивы, я на самом деле рекомендую рекурсивный подход:

 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 );