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

标签 php mysql laravel

我在 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/

相关文章:

php - 如何在 laravel 5.4.10 中添加自定义类

php - 运行 create table 时不断收到错误消息 1064

php - 如何将 id 与主干中的表行删除按钮关联

php - 如何在 PHP 中记录未捕获的异常?

PHP结束 session (不同的方式)我不明白

facebook - 强制使用 facebook oAuth 和 Socialite 接收电子邮件

sql - 优化右连接

php - 获取观看次数(唯一观众和唯一视频)

mysql - Rails mysql 记录页面的展示次数

php - 如何在 Visual Studio Code 中使用 HTML 标记格式化 PHP 文件?