我可以在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。我只想重申一下别人说的话:
使用阵列