Php 循环遍历所有Post变量并添加数值

Php 循环遍历所有Post变量并添加数值,php,forms,Php,Forms,我有一张这样的表格 <form action="index.php" method="post"> <select name="dropdownOption"> <option value="First Choice +200">First Choice</option> <option value="Second Choice +300">Second Choice</option> </select>

我有一张这样的表格

<form action="index.php" method="post">
<select name="dropdownOption">
  <option value="First Choice +200">First Choice</option>
  <option value="Second Choice +300">Second Choice</option>
</select>
<p><input type="checkbox" value="Rocket +100"> Rocket</p>

首选
第二选择
火箭

我要做的是循环遍历在_POST中发送的每个值,然后将“+”符号后的每个数字相加,并将其放入index.php文件中的一个变量中

例如,如果他们选择了“第二选择”并勾选了“火箭”复选框,那么加起来应该是400(300+100)

在本例中,只有两个不同的选项,但在最终的应用程序中,可能会有20-30个不同的东西,这就是为什么循环是必要的

还有,如何循环遍历每个未隐藏的元素(因此排除隐藏的表单元素)

如果需要负值,只需将
选项设置为如下所示:

<option value="Second Choice +-300">Second Choice</option>
$choices = array(
    '1' => array('value' => '100', 'text' => 'First choice'),
    '2' => array('value' => '150', 'text' => 'Second choice'),
    '3' => array('value' => '250', 'text' => 'Third choice'),
);
第二选择

为什么不在值中删除文本,只保留数字数据? 这些值无论如何都不可见,但在代码中,您可以轻松地将数值映射到文本。 换句话说,你可以有这样的东西:

<option value="Second Choice +-300">Second Choice</option>
$choices = array(
    '1' => array('value' => '100', 'text' => 'First choice'),
    '2' => array('value' => '150', 'text' => 'Second choice'),
    '3' => array('value' => '250', 'text' => 'Third choice'),
);
并以如下方式显示数据(或任何其他方式,但在值字段中具有选项ID):

并向用户显示数据:

<?php foreach($selected as $id): ?>
    <p>You chose <?php echo $choices[$id]['text']; ?></p>
<?php endforeach; ?>

你选择了


这是一种更好的方法,因为它给了您很大的灵活性。

我认为您正在将使用_POST发送的值存储在一个数组中

$total = 0;

foreach($selections as $sel){
    $sep = $explode('+', $sel);
    $value = (int)$sep[1];
    $total += $value;
}

您需要值的第一部分还是仅数值就可以了?仅数值就可以了,我知道如何输出其余的数据您最好使用
end()
获取数组中的最后一项,以确保该值不再包含一个字。这是真的,但我正在处理实际提供的代码。不过我做了更改,因为你的观点对记录是有效的,除非你将
end($num)
键入int,否则
是数值的检查将失败,因为它将是一个字符串。我如何从for each循环中排除对象?@Talon你不能排除特定的输入类型,因为输入类型不是在POST请求中发送的,只有键名称和值。实际的POST请求如下所示
name=1&mail=2&site=3
。因此,正如您所见,所有输入类型都被同等对待,无论它们是文本、文本区域、单选、复选框还是隐藏。稍后将使用值,但仅向用户显示计算中未使用的值。
$total = 0;

foreach($selections as $sel){
    $sep = $explode('+', $sel);
    $value = (int)$sep[1];
    $total += $value;
}