在 Blade 模板中,`@if` 语句不能直接访问 `@foreach` 循环外部的循环变量(如 `$names`),因其作用域仅限于循环体内;需将条件判断嵌入循环内部,才能对每个元素进行独立判断。

在 Blade 模板里写条件判断,很多人第一反应就是:用 `@if($names == "abc")` 直接判断循环变量。但跑起来却发现结果总是“Not”,怎么调都不对。问题出在哪?其实就一句话:循环变量出了循环体就不认了

具体来说,`@foreach ($value as $names)` 中的 `$names` 是一个循环内临时变量。当 `@endforeach` 执行完毕,这个变量要么失效,要么保留最后一次迭代的值(比如 "yyy")。如果你在循环外面写 `@if($names == "abc")`,它检测的是那个残留值,而不是遍历过程中的每一项——自然永远匹配不到 "abc"。这就是为什么你会看到“始终显示 Not”。

✅ 正确的做法很简单:把判断逻辑放到循环内部,每迭代一个元素就实时校验一次:

@foreach ($value as $names)
    

{{ $names }}

@if($names === 'abc')

Found

@else

Not

@endif @endforeach

这样,当 `$names` 依次取值 'abc'、'xyz'、'yyy' 时,只有第一次迭代会渲染 `

Found

`,其余输出 `

Not

`。逻辑清晰,结果也符合预期。

⚠️ 还有几个细节值得留意:

// Controller
$values = ['abc', 'xyz', 'yyy'];
$hasAbc = in_array('abc', $values);
return view('name', ['value' => $values, 'hasAbc' => $hasAbc]);

然后在 Blade 中直接使用:

@if($hasAbc)
    

Found

@else

Not

@endif

一句话总结:Blade 的变量作用域遵循 PHP 的基本规则,循环变量不能跨作用域引用。把逻辑放在该放的位置(循环内判断,或者控制器预计算),模板才能写得干净、健壮、好维护。

本文转载于:https://www.php.cn/faq/2344187.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。