web-dev-qa-db-fra.com

PHP comment passer en boucle dans un tableau de messages

Je dois parcourir un tableau de messages et le soumettre.

#stuff 1
<input type="text" id="stuff" name="stuff[]" />
<input type="text" id="more_stuff" name="more_stuff[]" />
#stuff 2
<input type="text" id="stuff" name="stuff[]" />
<input type="text" id="more_stuff" name="more_stuff[]" />

Mais je ne sais pas par où commencer. 

10
user1324780

Voici comment vous le feriez:

foreach( $_POST as $stuff ) {
    if( is_array( $stuff ) ) {
        foreach( $stuff as $thing ) {
            echo $thing;
        }
    } else {
        echo $stuff;
    }
}

Cela concerne à la fois les variables et les tableaux passés dans $_POST.

31
gimg1

Probablement, vous aurez également besoin des valeurs de chaque élément de formulaire, telles que la valeur sélectionnée dans une liste déroulante ou une case à cocher.

foreach( $_POST as $stuff => $val ) {
if( is_array( $stuff ) ) {
    foreach( $stuff as $thing) {
        echo $thing;
    }
} else {
    echo $stuff;
    echo $val;
}

}

18
glassfish
for ($i = 0; $i < count($_POST['NAME']); $i++)
{
   echo $_POST['NAME'][$i];
}

Ou

foreach ($_POST['NAME'] as $value)
{
    echo $value;
}

Remplacez NAME par le nom de l'élément, par exemple stuff ou more_stuff

6
Sarfraz

Vous pouvez utiliser array_walk_recursive et une fonction anonyme, par exemple:

$sweet = array('a' => 'Apple', 'b' => 'banana');
$fruits = array('sweet' => $sweet, 'sour' => 'lemon');
array_walk_recursive($fruits,function ($item, $key){
    echo "$key holds $item <br/>\n";
});

suit cette version de réponse:

array_walk_recursive($_POST,function ($item, $key){
    echo "$key holds $item <br/>\n";
});
2
Ivan Buttinoni

J'ai adapté la réponse acceptée et l'ai convertie en une fonction pouvant créer des tableaux et inclure les clés du tableau.

function LoopThrough($array) {
    foreach($array as $key => $val) {
        if (is_array($key))
            LoopThrough($key);
        else 
            echo "{$key} - {$val} <br>";
    }
}

LoopThrough($_POST);

J'espère que ça aide quelqu'un.

0
SollyM

Pour une raison quelconque, j'ai perdu mes noms d'index en utilisant les réponses postées. J'ai donc dû les boucler comme ceci:

foreach($_POST as $i => $stuff) {
  var_dump($i);
  var_dump($stuff);
  echo "<br>";
}
0
Pete