Php If语句不';t在简单的foreach循环中正确计算
我遇到了一个奇怪的问题,它与foreach循环中的一个简单条件相匹配。我正在使用PhalconPHP框架,但是我认为它与问题无关 问题是变量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
$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()将其转换回整数。