2010-04-30 5 views
0

J'ai le code suivant:PHP Looping .... besoin de quelques conseils

$q1 = $_POST["q1"]; 
$q2 = $_POST["q2"]; 
$q3 = $_POST["q3"]; 
$q4 = $_POST["q4"]; 
$q5 = $_POST["q5"]; 
$q6 = $_POST["q6"]; 
$q7 = $_POST["q7"]; 
$q8 = $_POST["q8"]; 

À l'heure actuelle, cela est codé en dur et je dois changer manuellement à chaque fois, je voudrais utiliser des variables Au lieu de cela, ce n'est pas un processus manuel.

Est-ce un cas d'utilisation d'une boucle, while ou foreach?

Si j'avais les informations $ q et q dans un tableau cela aiderait-il?

Merci,

Homer.

+3

Tout comme un sidenote, vous pouvez également changer vos valeurs de poste pour envoyer comme 'name =" q [1] "' à 'name =" q [8] "', alors vous pourriez travailler avec ces données comme un tableau distinct, directement, en utilisant '$ _POST ['q']'. // Edit: Gordon m'a battu pour ça. XD – pinkgothic

Répondre

8

ajuster vos formulaires Tenir compte d'utiliser la notation Array, par exemple

<ul> 
    <li><input name="q[]" /></li> 
    <li><input name="q[]" /></li> 
    <li><input name="q[]" /></li> 
    <li><input name="q[]" /></li> 
    ... 
</ul> 

Cela rendrait $_POST['q'] contiennent un tableau avec toutes les valeurs d'entrée données pour « q », que vous pouvez ensuite facilement itérer avec foreach comme ceci:

foreach($_POST['q'] as $q) { 
    // do something with $q 
} 

Voir http://www.johnrockefeller.net/html-input-forms-sending-in-an-array-in-php/

+0

+1, c'est une bonne idée. – pinkgothic

+3

vous pouvez également définir explicitement les touches de tableau si elles se réfèrent à des éléments/questions spécifiques sur le serveur, par ex. 'name =" q [4] "', etc '. –

+0

@Gordon - merci pour cela mais je ne peux pas utiliser la fonction "q []" que vous mentionnez sans changer toute l'approche. J'ai déjà l'information dans un tableau. –

0

Untested, et il a été un moment que j'utilisé PHP:

$q = array(); 
for ($i = 1; $i <= 8; ++$i) 
    $q[$i] = $_POST["q" . $i]; 
0

Essayez le code suivant, en cas si elle est ok avec vous de sauvegarder des données POST à ​​un autre tableau:

// Random POST array 
$_POST["q1"] = 1; 
$_POST["q2"] = 2; 
$_POST["q3"] = 3; 
$_POST["q4"] = 4; 
$_POST["q5"] = 5; 
$_POST["q6"] = 6; 
$_POST["q7"] = 7; 
$_POST["q8"] = 8; 

$array = Array(); 

foreach ($_POST as $value) { 
    $array[ ] = $value; 
} 

Dans le cas où vous souhaitez enregistrer des données POST dans des variables plus spécifiques, vous devrez utiliser un morceau de code un peu plus complexe. Peut éditer mon post si vous voulez voir plus d'options.

Edit:

Si vous vouliez travailler seulement avec les clés qui commencent par q et se terminent par numéro, vous pouvez utiliser le code suivant:

$array = Array(); 

foreach ($_POST as $key => $value) { 
    if (preg_match("/^[q]{1}\d$/", $key)) { 
     $array[ ] = $value; 
    } 
} 
+0

Il peut avoir d'autres variables $ _POST qu'il ne veut pas charger dans le tableau. – vladv

3

Oui, c'est le temps pour une boucle . Vous pouvez utiliser foreach ou while, cela n'a pas vraiment d'importance.

$i = 1; 
$q = array(); 
while($i < 9) { 
    $q[$i] = $_POST["q" . $i]; 
    $i += 1; 
} 
1

1.

$keys = array('q1', 'q2', 'q3', 'q5', 'q9'); 
$q = array(); 
foreach ($keys as $key) { 

    $q[$key] = isset($_POST[$key]) ? $_POST[$key] : null; 
} 

2.

$keys = array('q1', 'q2', 'q3', 'q5', 'q9'); 
foreach ($keys as $key) { 
    $$key = isset($_POST[$key]) ? $_POST[$key] : null; 
} 
// in output you will have variables called $q1, $q2, $q3, ... 

3.

$amount = 8; 
$q = array(); 
for ($i = 1; $i <= $amount; ++$i) { 
    $q[$i] = isset($_POST['q' . $i]) ? $_POST['q' . $i] : null; 
} 
Questions connexes