You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中多条件IF始终执行首个分支的原因排查

问题根源:赋值运算符 vs 比较运算符的误用

兄弟,你这问题其实是个新手常踩的经典坑——把赋值运算符=当成了比较运算符==(更严谨的话推荐用===严格相等)!

咱们直接看你代码里的条件判断部分:

if ($filtry_1value[$key] = 'min_cena' OR $filtry_1value[$key] = 'min_uzitna_plocha') {

这里的=是赋值操作,它会把'min_cena'硬塞给$filtry_1value[$key],而赋值表达式的结果就是'min_cena'——在布尔判断里,非空字符串会被判定为true。所以不管原来的数组元素是什么,这个条件永远为真,自然每次都会执行第一个分支的逻辑。

修正方案

把所有条件里的=改成比较运算符==(或者===,避免类型转换带来的意外):

$filtry_1value = ['stat', 'lokalita', 'patro', 'min_cena', 'max_cena', 'min_uzitna_plocha', 'max_uzitna_plocha'];
foreach ($filtry_1value as $key => $filtr_1value) {
    $filtr_1value = \Request::has($filtr_1value)? \Request::get($filtr_1value) : null;
    if(!empty($filtr_1value)){
        // 把赋值=改成比较==(推荐用===严格相等)
        if ($filtry_1value[$key] === 'min_cena' || $filtry_1value[$key] === 'min_uzitna_plocha') {
            $query->where(substr($filtry_1value[$key],4), '>=', $filtr_1value);
        } elseif ($filtry_1value[$key] === 'max_cena' || $filtry_1value[$key] === 'max_uzitna_plocha') {
            $query->where(substr($filtry_1value[$key],4), '<=', $filtr_1value);
        } else {
            $query->where($filtry_1value[$key], '=', $filtr_1value);
        }
    }
}

额外优化建议

为了让代码更清爽,你可以用in_array简化条件判断,还能去掉没必要的数组下标操作:

$filtry_1value = ['stat', 'lokalita', 'patro', 'min_cena', 'max_cena', 'min_uzitna_plocha', 'max_uzitna_plocha'];
foreach ($filtry_1value as $paramName) {
    $paramValue = \Request::has($paramName) ? \Request::get($paramName) : null;
    if(!empty($paramValue)){
        if (in_array($paramName, ['min_cena', 'min_uzitna_plocha'])) {
            $column = substr($paramName, 4);
            $query->where($column, '>=', $paramValue);
        } elseif (in_array($paramName, ['max_cena', 'max_uzitna_plocha'])) {
            $column = substr($paramName, 4);
            $query->where($column, '<=', $paramValue);
        } else {
            $query->where($paramName, '=', $paramValue);
        }
    }
}

这样代码可读性更高,也减少了下标操作可能带来的潜在问题。

内容的提问来源于stack exchange,提问作者paklic9

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:40:23