比较类型时奇怪的PHP行为

时间:2013-07-16 21:23:59

标签: php if-statement compare

我有以下代码:

var_dump($attr['value']);
if ($attr['value'] != 0 && $attr['value'] != null) {
    echo $attr['value'];
    $i++;
}

问题是转储告诉我$ attr ['value']是8个字符长的字符串但是if条件失败并且代码没有向我显示if块中$ attr ['value']的值。条件错了吗?我不想检查字符串的长度,有时它也可能是1个字符长的字符串。

3 个答案:

答案 0 :(得分:1)

这个条件:

if ($attr['value'] != 0)

验证$ attr ['value'] CONTAINS 0,这不是字符串的长度。

如果要验证字符串长度,请将代码修改为:

var_dump($attr['value']);
if (strlen($attr['value']) != 0 && $attr['value'] != null) 
{
    echo $attr['value'];
    $i++;
}

strlen($ variable)将验证字符串的长度:

http://php.net/manual/fr/function.strlen.php

您似乎只是在检查变量是否已设置,在这种情况下,您可以将代码简化为:

var_dump($attr['value']);
if ($attr['value']) 
{
    echo $attr['value'];
    $i++;
}

答案 1 :(得分:0)

尝试

if(!empty($attr['value'])){

答案 2 :(得分:0)

请注意,除非您使用0运算符,否则与整数比较时,任何非数字字符串都将转换为===

试试这个:

var_dump('a' == 0);   // true
var_dump('a' === 0);  // false

您要搜索的解决方案是:

if(isset($attr['value']) && !empty($attr['value'])) ...