PHP foreach循环获取$total与$singleprice异常及POST取值为0问题求解
第一种写法$singleprice返回空的原因
- 核心原因是你代码中存在
unset($available)的逻辑:只要数组中某一项的ElementID等于0,$available变量就会被销毁,后续执行$singleprice = $available['Cost']时,访问不存在的变量会返回空,同时PHP会抛出「未定义变量available」的警告。 - 就算没有触发unset逻辑,循环每次都会覆盖
$singleprice的取值,最终只会保留最后一次循环的赋值结果,和你要取指定单条Cost的需求也不匹配。 - 额外说明:你嵌套foreach的写法性能极低,等于数组长度为N时要执行N²次循环,完全没必要。如果要取固定下标的Cost值,直接通过下标获取即可,例如取第一条的写法是
$singleprice = $somethings[0]['Cost']。
POST接收$singleprice返回0的原因
- 浏览器提交表单时,只会携带
<input>、<select>、<textarea>这类表单元素中name属性对应的值,div的data-*属性不属于表单提交字段范畴,提交时不会被自动携带,因此$_POST['single-cost']本身是未定义值,如果你的PHP开启了自动将未定义变量转为0的配置,就会拿到0的结果。 - 修复方案:在表单内新增一个隐藏输入框,把
$singleprice存在该输入框的value中即可,示例代码:
<form method="post"> <!-- 其他表单元素 --> <input type="hidden" name="single-cost" value="<?php echo htmlspecialchars($singleprice); ?>"> <button type="submit">提交</button> </form>
- 建议接收POST参数时增加判空逻辑,避免未定义变量警告:
$singleprice = isset($_POST['single-cost']) ? (float)$_POST['single-cost'] : 0;
内容的提问来源于stack exchange,提问作者user15123815
相关产品推荐
相关产品推荐

