У меня есть куча значений, которые я хотел бы добавить вместе, которые вводятся в форму. Сейчас форма имеет 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?
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). Вот официальная документация и полезный учебник . Синтаксис переменной переменной – знак двойного доллара ($$).