2010-04-30 2 views
0

я следующий код:PHP Looping .... нужен совет

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

На данный момент, это трудно закодированный и мне нужно вручную изменить его каждый раз, я хотел бы использовать переменные вместо этого, чтобы это не ручной процесс.

Это случай использования петли, while или foreach?

Если бы у меня была информация о $ q и q в массиве, это помогло бы?

Thanks,

Гомер.

+3

Подобно тому, как sidenote, вы также можете изменить свои значения post для отправки как 'name =" q [1] "' to 'name =" q [8] "', тогда вы можете работать с этими данными как отдельный массив, напрямую, используя '$ _POST ['q']'. // Редактировать: Гордон избил меня. XD – pinkgothic

ответ

8

скорректируйте формы использования массива обозначения, например

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

Это сделало бы $_POST['q'] содержать массив со всеми значениями входных данных для «Q», которые затем можно легко итерации по с foreach, как это:

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

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

+0

+1, это хорошая идея. – pinkgothic

+3

, вы также можете объяснить, как установить ключи массива, если они ссылаются на определенные элементы/вопросы на сервере, например. 'name =" q [4] "' и т. д. '. –

+0

@ Gordon - спасибо за это, но я не могу использовать функцию «q []», которую вы упоминаете, не изменяя весь подход. У меня уже есть информация в массиве. –

0

непроверенная, и это было некоторое время, так как я в последний раз использовал PHP:

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

Попробуйте следующий код, в случае, если это нормально с вами, чтобы сохранить данные POST в другой массив:

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

Если вы хотите сохранить данные POST в более конкретные переменные, вам придется использовать бит более сложный фрагмент кода. Можете отредактировать мой пост, если вы хотите увидеть больше параметров.

Edit:

Если вы хотите работать только с ключами, которые начинаются с q и заканчивается номером, вы можете использовать следующий код:

$array = Array(); 

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

Он может иметь другие переменные $ _POST, которые он не хочет загружать в массив. – vladv

3

Да, это время для цикла , Вы можете использовать foreach или while, это не имеет большого значения.

$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; 
} 
Смежные вопросы