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

时间:2012-03-20 00:02:53

标签: 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>
<p><input type="checkbox" value="Rocket +100"> Rocket</p>

我想要做的是循环遍历_POST中发送的每个值,然后将'+'后面的每个数字汇总到index.php文件中的变量。

因此,例如,如果他们选择“第二选择”并勾选“火箭”复选框,它应该加起来400(300 + 100)。

在这个示例中,只有两个不同的选项,但在最终的应用程序中,将有20-30种不同的东西可以变化,这就是为什么需要循环的原因。

另外,我如何遍历每个未隐藏的元素(因此排除隐藏的表单元素)。

3 个答案:

答案 0 :(得分:1)

foreach ($_POST as $post) {
    $num = explode('+', $post);
    if (is_numeric((int) end($num)) {
        $sum += end($num);
    }
}

如果您需要负值,可以让option看起来像这样:

<option value="Second Choice +-300">Second Choice</option>

答案 1 :(得分:1)

我正在考虑您将使用_POST发送的值存储在数组中。

$total = 0;

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

答案 2 :(得分:0)

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

$choices = array(
    '1' => array('value' => '100', 'text' => 'First choice'),
    '2' => array('value' => '150', 'text' => 'Second choice'),
    '3' => array('value' => '250', 'text' => 'Third choice'),
);

显示这样的数据(或任何其他方式,但在值字段中显示选项ID):

<form action="index.php" method="post">
<select name="dropdownOption">
  <?php foreach($choices as $id => $choice): ?>
      <option value="<?php echo $id ?>"><?php echo $choice['text']; ?></option>
  <?php endforeach; ?>
</select>
</form>

然后拥有初始数组,您可以轻松总结所有数据:

$sum = 0;
foreach($selected as $id){
    $sum += $choices[$id]['value'];
}

并向用户显示数据:

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

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