我在Laravel 5.4 Blade视图中有以下代码:
@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以外的值。
答案 0 :(得分:2)
$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;
答案 1 :(得分:0)
您需要将if检查更改为
if ($strVal == 10 || $strVal == 11) {
$strMod = 0;
} elseif ($strVal == 12 || $strVal == 13) {
$strMod = 1;
} elseif ($strVal == 14) {
$strMod = 2;
} else {
$strMod = 2;
}
if ($strVal == 10 || 11)
将始终返回true。如果要检查两个值,则需要通过再次使用变量==值来指定它,如上例所示。