tipos - variables en programacion php
¿Puedo usar un nombre de variable generado en PHP? (9)
Tengo un conjunto de valores que me gustaría agregar juntos que se ingresan en un formulario. En este momento, el formulario tiene 11 líneas, pero podría aumentar de tamaño en el futuro. Puedo agregar fácilmente todos los valores junto con algo como:
$total = $value1 + $value2 + ... + $value11;
Todos los valores que deseo agregar juntos provienen de un formulario HTML
. Quiero evitar javascript.
Pero, quiero evitar tener que hacerlo manualmente, especialmente si crece mucho más. Este es mi intento de sumar todos los valores utilizando un bucle pero devuelve un error de "variable indefinida" (es solo un código de prueba para probar la idea):
<?php
$tempTotal = 0;
$pBalance1 = 5;
$pBalance2 = 5;
$pBalance3 = 5;
for ($i = 1 ; $i <= 3 ; $i++){
$tempTotal = $tempTotal + $pBalance.$i;
}
echo $tempTotal;
?>
¿Es lo que quiero hacer posible en PHP?
El concepto que está buscando se llama una variable variable (al menos así se llama en PHP). Aquí está la documentación oficial y un tutorial útil. La sintaxis para una variable variable es un signo de dólar doble ($$).
En aproximadamente el 99% de todos los casos que involucran una variable generada por PHP, usted está haciendo lo incorrecto. Voy a volver a repetir lo que otros han dicho:
UTILIZA UN ARRAY
Los valores que necesita se publican desde un formulario, ¿verdad? De ser así, podría repetir las claves en la variable $ _POST que coincidan con los nombres generados de su campo de formulario.
foreach($_POST as $key=>$value)
{
if(strpos($key, ''pBalance'')===0)
{
$final_total += $value;
}
}
Puede usar una matriz para almacenar sus datos y simplemente recorrerlos.
$tempTotal = 0;
$balances[] = 5;
$balances[] = 5;
$balances[] = 5;
for ($i = 0; $i <= count($balances); $i++) {
$tempTotal = $tempTotal + $balances[$i];
}
O para abreviar, use un ciclo foreach:
foreach($balances as $balance) {
$tempTotal += $balance;
}
Si intenta recopilar los valores de un POST, realmente debería usar un conjunto. Puede evitar tener que unir manualmente una matriz de este tipo utilizando:
<input type="text" name="vals[]" value="one" />
<input type="text" name="vals[]" value="two" />
$_POST["vals"]
será una matriz ("uno", "dos");
Tratar
$varName = ''pBalance'' . $i;
$tempTotal = $tempTotal + $$varName;
Uhm ¿por qué no usas una matriz? Si le das a los formularios un nombre como foobar [], será una matriz en PHP.
Usaría la solución de @ unexist. Dale a los campos de entrada nombres como:
<input name="myInput[]" />
<input name="myInput[]" />
<input name="myInput[]" />
...
Luego, en su PHP obtenga la suma de esta manera:
$total = array_sum($_REQUEST[''myInput'']);
Debido al ''[]'' al final de cada nombre de entrada, PHP hará que $ _REQUEST [''myInput''] sea automáticamente una matriz. ¡Una práctica característica de PHP!
for ($i = 1 ; $i <= 3 ; $i++){
$varName = "pBalance".$i;
$tempTotal += $$varName;
}
Esto hará lo que quieras. Sin embargo, es posible que considere utilizar una matriz para este tipo de cosas.