比较PHP中不包含Null或空值的字符串


Compare strings in PHP excluding Null or empty values

我有一个关于PHP中字符串比较的简单问题。

我想知道两个字符串(也适用于任何其他类型)是否相等,但我想排除null或空值的比较,所以,我这样做:

if (!empty($var) && $var == $varToCompare) {
    //do stuff
}

它工作得很好,但我想知道是否存在一些操作符或函数来避免empty()部分。

我的背景:我想以一般的方式了解这一点,但这里有我的背景来澄清。我有两个或多个变量,我需要将它们与数据库中的变量进行比较,但是如果我在数据库中有一个NULL,我的var也是NULL(或空字符串),我期望false。即使使用===运算符,如果两个字符串是NULL或类似""的东西,我也会收到true。参见示例:

$myVars = $this->getArrayOfVars();
$var1 = $myDB->getVar1();// could be null or ""
$var2 = $myDB->getVar2();// could be null or ""
if ((!empty($var1) && $var1 == $myVars[1]) || (!empty($var2) && $var2 == $myVars[2])) {
    //do stuff
    // I just enter here when the strings are equal, but avoiding the null or empty values
}

我检查了文档,但没有找到任何东西。有人知道有什么函数能做到这一点吗?

试试is_null()strcmp()例如,

if(strcmp($var,"")!=0 || is_null($var)){//strcmp returns 0 when strings are equal
}

最佳实践是创建自己的函数:

/** return false if any parameter is empty() or $var1 !== $var2 **/
function strictlyEqualAndNotNull($var1, $var2) {
    return (!empty($var1) && $var1 === $var2);
}

给出:

$myVars = $this->getArrayOfVars();
$var1 = $myDB->getVar1();// could be null or ""
$var2 = $myDB->getVar2();// could be null or ""
if (strictlyEqualAndNotNull($var1, $myVars[1]) || 
    strictlyEqualAndNotNull($var2, $myVars[2])) {
    // do stuff
    // You will enter here when the strings are equal, but avoiding the null or empty values
}

为什么不使用严格比较呢?像$one === $two一样?如果其中一个是字符串而另一个不是,它将不起作用。链接:http://php.net/manual/en/language.operators.comparison.php

只需在empty()设置的字符串前面加上@符号

if (@$var && $var == $varToCompare) {
        //do stuff
}

$myVars = $this->getArrayOfVars();
$var1 = $myDB->getVar1();// could be null or ""
$var2 = $myDB->getVar2();// could be null or ""
if ((@$var1 && $var1 == $myVars[1]) || (@$var2 && $var2 == $myVars[2])) {
    //do stuff
    // I just enter here when the strings are equal, but avoiding the null or empty values
}