2015-07-13 66 views
1

我有一個關於在PHP中比較字符串的簡單問題。在PHP中比較字符串,不包括空值或空值

我想知道,如果兩個字符串(也適用於任何其他類型)是相等的,但我想排除比較空或空值,所以,我這樣做:

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

它工作正常,但我想知道是否存在一些操作員或功能來做到這一點,避免empty()部分。

我的背景: 我想以通用的方式知道這一點,但這是我的背景來澄清。 我有兩個或更多的變量,我需要將它們與我的數據庫中的變量進行比較,但是如果我的數據庫中有一個NULL,並且我的變量也是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 
} 

我檢查了文檔,但沒有找到任何東西。有人知道可以做到這一點的功能嗎?

+1

不是'empty()'通用不夠嗎? –

+0

請記住,'empty(0)'和'empty('0')'是'true'。 – VolkerK

+1

如果在'getArrayOfVars()'方法中,如果你有'null'或'''''替換它們''「'(空格),那麼你將不需要測試的第一部分('!empty $ var)')? – Maraboc

回答

1

最好的做法是讓自己的功能:

/** 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 
} 
+0

我正在爲此尋找一個內置函數,但顯然創建我自己的確是最好的選擇。 – James

+0

是的,它太具體,不能成爲一個內置函數(在PHP中...它可能存在於Java的StringUtils中......) – Random

2

嘗試is_null()strcmp()

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

爲什麼不使用嚴格的比較呢?像$one === $two?如果其中一個將是字符串而另一個不是,它將不起作用。鏈接:http://php.net/manual/en/language.operators.comparison.php

+2

但是它不會按問,即如果'$ one'爲NULL且'$ two'爲NULL,測試必須返回false,而'$ one === $ two'將返回true ... – Random

+0

問題是關於比較字符串,對嗎?所以默認情況下字符串不是'null'。 – t1gor

+0

但明確表示「我想排除比較的空值或空值」 – Random

-1

只是把@符號在()instated的空字符串前面

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 
} 
+1

請避免使用'@'。它可以抑制錯誤並使您的代碼不易維護。 – t1gor

+0

但我的工作完美!在我所有的應用程序! – Ramyz