2010-08-24 5 views
0

Как создать переменные переменные внутри цикла for?переменные переменные

это петля:

for ($counter = 1; $counter <= $aantalZitjesBestellen; $counter ++) { 

} 

внутри этого цикла я хотел бы создать переменную $ место для каждого времени она проходит, но он должен incrementlike так. в первый раз он должен пройти $seat1 = $_POST['seat'+$aantalZitjesBestellen], в следующий раз: $seat2 = $_POST['seat'+$aantalZitjesBestellen] и так далее.

так что в конце концов, это должно быть:

$seat1 = $_POST['seat1']; 
$seat2 = $_POST['seat2']; 

и так далее.

поэтому переменная и содержимое $ _POST должны быть динамическими.

+9

Почему бы не сделать массив? – kennytm

+0

@ KennyTM Хорошая точка! – jensgram

+0

Действительно, вы должны менять значения в переменных $ _POST. Вы делаете это, потому что хотите обновить значения в форме, которую вы показываете? Если это так, вы можете рассмотреть возможность использования javascript для этого. – PhoebeB

ответ

6

Во-первых, я бы использовал массив для этого, если у меня что-то не хватает. Наличие переменных, таких как $seat1, $seat2 и т. Д., Имеет гораздо меньшую полезность и будет гораздо более громоздким, чем использование массива.

При этом, используйте следующий синтаксис:

for ($counter = 1; $counter <= $aantalZitjesBestellen; $counter ++) { 
    $key = 'seat' . $counter; 
    $$key = $_POST[$key]; 
} 

Наконец, PHP имеет встроенную функцию для извлечения ключей массива в таблицу символов: extract(). extract() имеет огромные потенциальные проблемы безопасности, если вы используете его с нефильтрованным вводом пользователя (например, $_POST), поэтому используйте с осторожностью.

+1

И настоятельно не рекомендуется использовать extract(), поскольку он может открывать дыры в вашем приложении. – Lekensteyn

2

(Expanded для ясности - вы может быть в состоянии сделать один-лайнер)

for ($counter = 1; $counter <= $aantalZitjesBestellen; $counter ++) { 
    $varname = 'seat' . $counter; 
    $$varname = $POST[$varname]; 
} 

НО! Вы действительно не должны этого делать. (И если вы действительно должны, см. cletus' answer для встроенного способа PHP, чтобы это сделать - это тоже считается плохой практикой.)

Пересмотреть свою проблему и посмотреть, могут ли быть решены массивы (я думаю, это будет). Это сделает как проверку (через, например, var_dump()), так и итерацией проще и не загрязняет глобальное переменное пространство.

+1

Это такая плохая практика ... Массив был бы настолько здоровее –

+1

@Pekka Согласен (но это отвечает на вопрос OP). Я расскажу о своем ответе :) – jensgram

0
for ($counter = 1; $counter <= $aantalZitjesBestellen; $counter ++) { 
    $name = 'seat' . $counter; 
    $$name = $_POST['seat' . $counter]; 
} 

Рекомендуется использовать массивы, так как вы можете легко их проверить.

3

Это будет работать, а также:

for ($counter = 1; $counter <= $aantalZitjesBestellen; $counter ++) { 
    ${'seat' . $counter} = $_POST['seat' . $counter]; 
} 
+0

Я предпочитаю этот синтаксис (хотя я обычно использую его для свойств, а не для локальных переменных). – strager

0

Вы можете использовать extract, но я не рекомендовал делать то, что вы пытаетесь сделать.

Смежные вопросы