Laravel中if else条件无法传入0值但可传入null值的问题
解决Laravel中else条件无法正确赋值0的问题
你的问题根源在于empty()函数的判断逻辑——它会把数字0、字符串"0"、null、空字符串、空数组等都判定为“空”,导致本该进入if块处理的场景(比如$indicator->rating为"0")错误进入else,或是你期望仅真正空值触发else时,empty()的判定范围过广导致逻辑不符合预期。
修复方案
替换empty()判断,改用更精确的条件区分“真正的空值”和“0值”,同时增加JSON解析的有效性校验:
@foreach ($indicators as $indicator) @php // 仅当rating不为null且不是空字符串时,才处理解析 if ($indicator->rating !== null && $indicator->rating !== '') { $rating = json_decode($indicator->rating, true); // 校验JSON解析结果是否为有效数组,避免调用count/array_sum报错 if (is_array($rating) && !empty($rating)) { $starsum = array_sum($rating); $overallrating = $starsum / count($rating); } else { // 解析失败或数组为空时,设为0 $overallrating = 0; } } else { $overallrating = 0; } @endphp @endforeach
关键说明
- 用
$indicator->rating !== null && $indicator->rating !== ''替代!empty(),确保**数字0、字符串"0"**能正常进入if块处理 - 新增
is_array($rating) && !empty($rating)判断,防止json_decode失败返回null或空数组时触发报错 - 所有空值场景(null、空字符串、解析失败)都会正确进入对应分支,将
$overallrating设为0
内容的提问来源于stack exchange,提问作者Ijaz Ahmad
相关产品推荐
相关产品推荐

