PHP变量声明在Laravel 5.4中不起作用

时间:2017-05-14 20:36:26

标签: php mysql laravel

我在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以外的值。

2 个答案:

答案 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。如果要检查两个值,则需要通过再次使用变量==值来指定它,如上例所示。