我在 Laravel 5.4 Blade View 中有以下代码:
@php($strVal = $character->Strength)
@php($strMod = 0)
<?php
if ($strVal == 10 || 11) {
$strMod = 0;
} elseif ($strVal == 12 || 13) {
$strMod = 1;
} elseif ($strVal == 14) {
$strMod = 2;
} else {
$strMod = 2;
}
?>
它从 MySQL 表中获取数据。 $strVal 是表中的一个 int。该代码创建一个名为 $strMod 的 var,并通过许多 if/elseif 语句来查看它等于什么。
在网页上显示如下:
<div class="huge charMod">+{{$strMod}}</div>
我的问题是,无论 strVar 等于什么,它都显示为“+0”。 strVar 工作正常,我可以从数据库中提取它并通过 {{ $strVal }} 显示它,但 strMod 拒绝采用 0 以外的值。
最佳答案
$strVal == 10 || 11
总是返回 true
因为 PHP 中的比较不是这样进行的。 ==
运算符的优先级高于 ||
运算符,因此将首先执行。
这意味着$strVal == 10 || 11
变成 false || 11
..这是true
.
我建议不要使用该代码:
$map = [
10 => 0,
11 => 0,
12 => 1,
13 => 1,
// you dont actually need 14, because default value is aready 2
];
$result = 2;
if (array_key_exists($strVal, $map)) {
$result = $map[$strVal];
}
$strVal = $result;
或者,如果您使用的是 PHP 7.0+,则实际上可以写为:
$map = [10 => 0, 11 => 0, 12 => 1, 13 => 1];
$strVal = $map[$strVal] ?? 2;
关于PHP 变量声明在 Laravel 5.4 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43968565/