Php If语句不';t在简单的foreach循环中正确计算

Php If语句不';t在简单的foreach循环中正确计算,php,phalcon,Php,Phalcon,我遇到了一个奇怪的问题,它与foreach循环中的一个简单条件相匹配。我正在使用PhalconPHP框架,但是我认为它与问题无关 问题是变量$var在我的foreach循环中的if语句中没有正确计算。但是,当我手动覆盖变量时,它确实可以正常工作 我不明白$cookie->getValue()的输出所创建的值2之间有什么区别;我手动定义的2 var_dump($var) // Outputs NULL if($cookie) { $var = $cookie-&g

我遇到了一个奇怪的问题,它与foreach循环中的一个简单条件相匹配。我正在使用PhalconPHP框架,但是我认为它与问题无关

问题是变量
$var
在我的foreach循环中的if语句中没有正确计算。但是,当我手动覆盖变量时,它确实可以正常工作

我不明白$cookie->getValue()的输出所创建的值2之间有什么区别;我手动定义的2

    var_dump($var) // Outputs NULL

    if($cookie) {
        $var = $cookie->getValue();
    }

    var_dump($var) // Outputs string(32) "2"

    foreach($array as $row) {
        var_dump($var) // Outputs string(32) "2" string(32) "2" string(32) "2"
        var_dump($row['thing']); // Outputs string(1) "1" string(1) "2" string(1) "3"

        if($var == $row['thing']) { // Never evaluates as true
            echo 'hello world'; // Nothing
            $var2 = 'hello world';
        }
    }

    var_dump($var2); // Outputs NULL
但是,如果我在foreach循环之前手动覆盖变量,它的计算结果是正确的

    var_dump($var); // Outputs NULL

    if($cookie) {
        $var = $cookie->getValue();
    }

    var_dump($var); // Outputs string(32) "2"

    //OVERWRITE VAR
    $var = 2;

    foreach($array as $row) {
        var_dump($var); // Outputs int(2) int(2) int(2)
        var_dump($row['thing']); // Outputs string(1) "1" string(1) "2" string(1) "3"

        if($var == $row['thing']) { // Evaluates Correctly
            echo 'hello world'; // Outputs "hello world"
            $var2 = 'hello world';
        }
    }

    var_dump($var2); // Outputs string(11)"hello world"

关于我做错了什么,或者如何更好地进一步调试这个问题,有什么建议吗?

是的,用户var_dump,这总是你的错,不要认为你发现了PHP错误(我总是这样做) 在你的foreach声明发表之前

var_dump($var , $row['thing']);
echo "====\n";

var\u dump($var)---总是喜欢
var\u dump
而不是
echo
进行调试您可能希望使用$var=intval($cookie->getValue())@谢谢,zerkms很棒的提示,看起来函数输出的是字符串(32)“2”。但是,double equals(=)不是意味着忽略类型吗?对不起,我的错,请重新阅读代码。谢谢您的回答
$var1=string(32)“2”
$row['thing']=string(1)“2”
。然而,这仍然不能解释为什么它不能正确评估病情。如果我错了,请纠正我,但不要double equals==try and ignore type???它说您的
$var1
是一个32个字符的字符串。当您获得这些var转储时,能否请您查看页面源代码,并向我们展示
$var1
的输出?好的,问题确实是字符串长度为32个字符,值仅为2?生成这个的函数是一个Phalcon函数,所以我将用它们来解释它。解决方案是使用intval()将其转换回整数。