Как распечатать массив $ _POST? - PullRequest
6 голосов
/ 17 августа 2011

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

<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 />

Что я 'я делаю неправильно?

Ответы [ 10 ]

26 голосов
/ 06 марта 2013

Циклы foreach работают просто отлично, но вы также можете просто

print_r($_POST);

Или для красивой печати в браузере:

<code>echo "<pre>";
print_r($_POST);
echo "
";
12 голосов
/ 17 августа 2011
<?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 />';
  }

} 

 ?>

это будет работать, ваше первое решение пытается напечатать массив, потому что ваше значение - массив.

5 голосов
/ 17 августа 2011

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

2 голосов
/ 17 августа 2011

Почему вы оборачиваете массив $_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) {
    // ...
}
1 голос
/ 21 февраля 2014

Недавно столкнулся с этим «взрывом».

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

echo 'Variables: ' . implode( ', ', $_POST);
1 голос
/ 17 августа 2011

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

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 голос
/ 17 августа 2011

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

$myarray = $_POST;

Однако в этом, вероятно, нет необходимости, поскольку вы можете просто вызвать его через $_POST в вашем скрипте.

1 голос
/ 17 августа 2011

Просто:

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

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

} 
0 голосов
/ 17 августа 2011

$ _ POST - это уже массив.Попробуйте это:

foreach ($_POST as $key => $value) {
    echo "<p>".$key."</p>";
    echo "<p>".$value."</p>";
    echo "<hr />";
} 
0 голосов
/ 17 августа 2011

$_POST сам по себе массив, вам не нужно делать из него массив. Что вы сделали, так это вложили массив $_POST в новый массив. Вот почему вы печатаете Array. Измените его на:

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

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

} 
...