如何判断循环中值全为真/含假值及购物车商品是否全支持COD
问题解答:检查循环中值的全量状态&购物车COD支持判断
问题1:如何检查循环中的所有值是否均为true,或者其中是否存在false值?
这是个很常见的全量验证场景,通用处理思路非常清晰:
- 先默认假设所有值都是true,初始化一个结果变量为
true - 遍历每一个值,只要遇到任何一个
false,立刻把结果变量设为false,还可以提前终止循环(没必要再检查剩下的值,能提升效率) - 遍历结束后,结果变量就会告诉你:所有值是否全为true(变量为true),还是存在false(变量为false)
给你举个PHP的简单示例:
$values = [true, true, false, true]; $allTrue = true; foreach ($values as $val) { if (!$val) { $allTrue = false; break; // 提前退出循环,优化性能 } } // 输出:存在false值 echo $allTrue ? '所有值都是true' : '存在false值';
问题2:遍历购物车数据时,如何判断所有商品是否均支持货到付款(COD)?
先说说你当前代码的问题:你的循环每次都会覆盖$allItemAllowCod的值,最后只会保留最后一个商品的COD状态,完全忽略了前面商品的情况。比如你的示例数据里,最后一个商品gun的cod是1,你的代码会返回true,但实际上phone的cod是0,应该返回false才对。
修正后的代码
按照问题1的思路调整,代码如下:
// 初始化:默认所有商品都支持COD $allItemAllowCod = true; foreach($mycart as $row){ // 只要发现任何一个商品cod为0(不支持COD),就标记结果为false并跳出循环 if($row->cod == 0){ $allItemAllowCod = false; break; } } // 示例数据下会输出:bool(false) var_dump($allItemAllowCod);
代码解释
- 初始值设为
true:先假设所有商品都支持COD - 遍历过程中一旦发现不支持的商品,立刻标记结果为
false,并终止循环(因为已经确定不是全部支持了,不用再检查剩下的) - 遍历结束后,
$allItemAllowCod就是最终的判断结果
另外,因为PHP里0属于“假值”,你也可以简化判断条件为if(!$row->cod),效果完全一样,代码会更简洁:
$allItemAllowCod = true; foreach($mycart as $row){ if(!$row->cod){ $allItemAllowCod = false; break; } }
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

