我的表格看起来像这样。
<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种不同的东西可以变化,这就是为什么需要循环的原因。
另外,我如何遍历每个未隐藏的元素(因此排除隐藏的表单元素)。
答案 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; ?>
这是一种更好的方法,因为它为您提供了很大的灵活性。