Могу ли я использовать сгенерированное имя переменной в PHP? - PullRequest
1 голос
/ 25 сентября 2008

У меня есть куча значений, которые я хотел бы сложить вместе, которые вводятся в форму. Прямо сейчас, форма имеет 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?

Ответы [ 9 ]

7 голосов
/ 25 сентября 2008
for  ($i = 1 ; $i <= 3 ; $i++){
    $varName = "pBalance".$i;
    $tempTotal += $$varName;
}

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

7 голосов
/ 25 сентября 2008

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

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

Тогда в вашем PHP получите такую ​​сумму:

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

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

3 голосов
/ 25 сентября 2008

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

2 голосов
/ 25 сентября 2008

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

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

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

2 голосов
/ 25 сентября 2008

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

$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;
}
2 голосов
/ 25 сентября 2008

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

foreach($_POST as $key=>$value)
{
  if(strpos($key, 'pBalance')===0)
  {
    $final_total += $value;
  }
}
1 голос
/ 25 сентября 2008

Примерно в 99% всех случаев, связанных с сгенерированной PHP переменной, вы выполняете «Неправильно». Я просто повторю то, что сказали другие:

ИСПОЛЬЗОВАТЬ Массив

0 голосов
/ 25 сентября 2008

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

0 голосов
/ 25 сентября 2008

Попробуйте

$varName = 'pBalance' . $i;
$tempTotal = $tempTotal + $$varName;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...