Могу ли я использовать сгенерированное имя переменной в PHP?

У меня есть куча значений, которые я хотел бы добавить вместе, которые вводятся в форму. Сейчас форма имеет 11 строк, но в будущем она может увеличиться. Я могу легко добавить все значения вместе с чем-то вроде:

$total = $value1 + $value2 + ... + $value11; 

Все значения, которые я хочу добавить вместе, поступают из HTML формы. Я хочу избежать javascript.

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

 <?php $tempTotal = 0; $pBalance1 = 5; $pBalance2 = 5; $pBalance3 = 5; for ($i = 1 ; $i <= 3 ; $i++){ $tempTotal = $tempTotal + $pBalance.$i; } echo $tempTotal; ?> 

Является ли то, что я хочу сделать в PHP?

Related of "Могу ли я использовать сгенерированное имя переменной в PHP?"

 for ($i = 1 ; $i <= 3 ; $i++){ $varName = "pBalance".$i; $tempTotal += $$varName; } 

Это сделает то, что вы хотите. Однако вы действительно можете использовать массив для такого рода вещей.

Я бы использовал решение @ unexist. Дайте имена полей ввода, например:

 <input name="myInput[]" /> <input name="myInput[]" /> <input name="myInput[]" /> ... 

Затем в вашем PHP получите сумму следующим образом:

 $total = array_sum($_REQUEST['myInput']); 

Из-за «[]» в конце каждого имени ввода PHP автоматически добавит $ _REQUEST ['myInput'] в массив. Удобная функция PHP!

Почему вы не используете массив? Если вы дадите формам имя foobar [], это будет массив в PHP.

Значения, которые вам нужны, отправляются из формы, не так ли? Если это так, вы можете выполнять итерацию через ключи в переменной $ _POST, которые соответствуют сгенерированным именам поля формы.

 foreach($_POST as $key=>$value) { if(strpos($key, 'pBalance')===0) { $final_total += $value; } } 

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

 $tempTotal = 0; $balances[] = 5; $balances[] = 5; $balances[] = 5; for ($i = 0; $i <= count($balances); $i++) { $tempTotal = $tempTotal + $balances[$i]; } 

Или для краткости используйте цикл foreach:

 foreach($balances as $balance) { $tempTotal += $balance; } 

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

 <input type="text" name="vals[]" value="one" /> <input type="text" name="vals[]" value="two" /> 

$_POST["vals"] будет массивом («один», «два»);

Около 99% всех случаев, связанных с генерируемой PHP переменной, вы делаете The Wrong Thing. Я просто повторю то, что сказали другие:

ИСПОЛЬЗОВАТЬ МАССИВ

Пытаться

 $varName = 'pBalance' . $i; $tempTotal = $tempTotal + $$varName; 

Концепция, которую вы ищете, называется переменной переменной (по крайней мере, она называется в PHP). Вот официальная документация и полезный учебник . Синтаксис переменной переменной – знак двойного доллара ($$).