【问题标题】:PHP Weird IF statement result on boolean? [closed]布尔值的PHP奇怪的IF语句结果? [关闭]
【发布时间】:2015-12-22 16:00:52
【问题描述】:

所以我有这个代码:

echo $argi[2][$iterate2][$iterate];
if ($argi[2][$iterate2][$iterate]==TRUE){
    echo " It's true ";
}

结果是:

是真的

这是真的

你知道为什么吗? 我试图将 IF 更改为 var=TRUE, var===TRUE, var=="true", var=1

这些都不起作用。之前没遇到过这种问题,真的很奇怪……

附: if 语句在两个 foreach 循环内。我不知道这是否重要...

编辑

我把echo改成了var_dump,结果是:

string(5) "false" It's true

编辑 2

这是脚本的一部分:

$iterate2=0;
foreach ($UpdateData as $key => $value) {
    $sql.="UPDATE `addtmptable` SET ";
    $sql.="$key = CASE ";
    $iterate=0;

        foreach ($value as $val) {

            $sql.="WHEN user = '$UpdateDataU[$iterate]' THEN $val ";

                var_dump($argi[2][$iterate2][$iterate]);
                if ($argi[2][$iterate2][$iterate]==true){
                    echo " It's true ";
                }
            $iterate++;
        }

    $sql.=";";
    $iterate2++;
}

我停止了,如果声明为真,我想触发内部 foreach

【问题讨论】:

  • 您应该显示变量实际包含的内容。使用var_dump,而不是echo
  • 非常不清楚的问题。我不知道你想做什么
  • 我怀疑 $argi[2][$iterate2][$iterate];是一个包含“真”或“假”的字符串。正如@mario 提到的,使用 var_dump 代替
  • 这应该不会对代码产生任何影响,但请尝试将“TRUE”更改为“true”,换句话说,不要大写。也有@mario 说发布你想要的 var_dump
  • 您是否尝试使用 true(小写)而不是 TRUE(大写)?

标签: php if-statement for-loop foreach


【解决方案1】:

字符串with any value 将始终计算为布尔值true。将您的比较改为$argi[2][$iterate2][$iterate] == "TRUE"

【讨论】:

    【解决方案2】:

    您正在根据布尔值测试字符串。

    计算结果为假的唯一字符串是“”和“0”。

    if (strtolower($argi[2][$iterate2][$iterate]) != "false") {
        echo " It's true ";
    }
    

    【讨论】:

    • 谢谢!我想了一个小时怎么了! :)
    • 这个答案当然假设,当您期望它评估为假时,您的值将始终是字符串“false”......这里的副作用是“fals”(错误的错字) 将评估为 true。
    • 是的,我明白了。我的问题是,如果选中了复选框,我使用 js 传递为 true 的变量,但我不认为 js 会将 tru 或 false 放入字符串中;)再次感谢
    猜你喜欢
    • 1970-01-01
    • 2014-09-01
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-04
    相关资源
    最近更新 更多