【发布时间】:2023-04-09 02:25:01
【问题描述】:
由于我基本上是一名设计师而不是开发人员,因此我遇到了一个(可能很简单)我似乎无法弄清楚的问题。
我的问题:
我想将选中复选框的值相加,并将它们的总和显示为$sum。我认为非常简单,但我似乎 (1) 需要某种形式的初始检查是否已发布任何复选框以避免 Warning: Invalid argument supplied for foreach(),以及 (2) 一些在不选择任何复选框的情况下防止发布。
我一直在尝试通过查看相关线程(例如 Invalid argument supplied for foreach())来解决我的问题,并且我尝试使用那里提到的解决方案,但不幸的是没有成功 - 你可以看到我已经注释掉的行, if (is_array($product)) {.
目标
我使用此代码的最终目标是创建一个表单,其中包含 3 个复选框/类别,用户必须检查至少一个 in each segment(如果他们愿意,他们可以检查所有就像,在我的示例代码中只提供了第一个段/类别)。每个复选框都将提供一个值,用于将它们全部加起来。
我很高兴看到任何替代解决方案和优化,只要您能解释或指出您的改进示例,因为我是 PHP 的初学者。
Index.php
/* if (is_array($product)) { */
foreach ($_POST['product'] as $name => $value) {
$sum = array_sum(array_map('intval', $_POST['product']));
echo('sum: '.$sum);
}
/* } */
?>
<form action="index.php" method="post">
<label><input type="checkbox" name="product[1]" value="100" />100<br></label>
<label><input type="checkbox" name="product[2]" value="200" />200<br></label>
<label><input type="checkbox" name="product[3]" value="300" />300<br></label>
<br>
<input type="submit" name="submit">
</form>
<a href="index.php">reload</a>
【问题讨论】:
-
if (count($_POST['product'] )>0 ){....} -
为什么要循环计算总和?它不会改变。
-
^^ 你真的只需要
array_sum($_POST['product']) -
要添加到@Dagon 的建议,还要检查它是否是
count()之前的数组。if (is_array($_POST['product']) && count($_POST['product']) > 0)...不过,is_array()你走在正确的轨道上。 -
...嗯,我刚刚得知
count(null)返回 0,但如果未设置数组键,您仍然会收到undefined_index通知,因此您应该先检查:if (isset($_POST['product'] && count($_POST['product']) > 0) {...}而不是比is_array()不会检查密钥的存在。
标签: php arrays checkbox foreach sum