У меня есть следующая таблица.
<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 );