我可以在PHP中使用生成的变量名吗?

时间:2020-03-06 14:41:31  来源:igfitidea点击:

我有一堆要加在一起的值,这些值被输入到表单中。目前,该表格有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中做些什么吗?

解决方案

嗯,为什么不使用数组呢?如果给表单命名,例如foobar [],它将是PHP中的一个数组。

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

这将做我们想要的。但是,我们确实可以考虑将数组用于此类操作。

我们需要的值是从表单中发布的,对吗?如果是这样,我们可以遍历$ _POST变量中与表单字段的生成名称匹配的键。

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

尝试

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

我们可以使用数组存储数据,然后循环遍历。

$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;
}

我们要查找的概念称为变量变量(至少在PHP中称为变量变量)。这是官方文档和有用的教程。变量变量的语法是双美元符号($$)。

我会使用@unexist的解决方案。给输入字段名称,例如:

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

然后在PHP中获得如下所示的总和:

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

由于每个输入名称末尾都有" []",PHP将使$ _REQUEST ['myInput']自动成为数组。 PHP的便捷功能!

如果我们尝试收集POST的值,则应该使用数组。我们可以避免使用以下方法手动拼凑这样的数组:

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

$ _POST [" vals"]`将是array(" one"," two");

在涉及PHP生成的变量的所有案例中,大约有99%是在做The Wrong Thing。我只想重申一下别人说的话:

使用阵列