2014-04-22 112 views
1

我有兩個PHP變量可以是空的(即value="")或包含名稱格式爲Last,First用逗號和最後一個名字之間的空格(例如Mouse,Mickey )。PHP:與比較變量的問題

我想在這裏做一個簡單的檢查,並說如果一個變量不是空的,並等於另一個,然後檢查一個複選框,但這不起作用。 這裏有人可以告訴我我做錯了什麼(在下面的例子中應該勾選複選框)?

我的問題是,即使變量不匹配,複選框也會被檢查。

例子:

$poc1 = "Mouse, Mickey"; // hard-coded for testing 
$poc2 = "Mouse, Mickey"; // hard-coded for testing 

<input type="checkbox" id="check2" name="Copy_POC" <?php if(($poc2 != "") && (strcmp($poc2,$poc1))) { echo "checked"; } ?> /> 

非常感謝任何幫助,蒂姆。

+0

請告訴我你得到的錯誤? –

+0

剛剛更新了上面的內容。沒有錯誤,它只是一直檢查它。 – user2571510

+2

http://php.net/in_array - 如果它太複雜:將其包裝在它自己的函數中。然後您可以修復該功能,並調用該功能的所有代碼自動工作正確:) – hakre

回答

1

你需要看看函數簽名strcmp,它的返回值:

int strcmp (string $str1 , string $str2) 

因此函數返回一個int,但什麼樣的int?根據手冊:

返回< 0如果str1小於str2;如果str1大於str2,則爲0;如果相等,則爲0。

換句話說:如果兩個字符串相等,strcmp返回0,其評估對false。因此,你應該寫的是:

strcmp($str1, $str2) !== 0 

如果2個字符串不匹配,則計算結果爲true。當然,你只希望看到ckeckbox檢查時,兩個字符串比賽:

if ($str1 != '' && strcmp($str1, $str2) === 0) 
{ 
    //checked 
} 

這應該做到這一點。當然,這仍然依賴於你的調用函數來檢查這些字符串是否相等。這並不加起來真的,雖然,這可能是一個更容易只寫:

if ($str1 && $str1 === $str2) 
//an empty string is falsy + type & value check on 2 strings using === operator 


正如你可能已經知道,PHP是建立在C,因此具有很多類C的str*功能。無論何時您看到像strcmpstrstr這樣的功能,請檢查其返回值。象C string.h功能,它往往會返回一個指針(其中子被發現,像strstr字符串的一部分),或一個整數(索引/在串偏移)...

+0

完美,是的,這正是我錯過的!之前沒有使用過這個功能。非常感謝 ! :)我會盡快接受。 – user2571510

+1

如果這是答案,那麼您可能首先要查找:'$ str1 === $ str2'或'$ str1 == $ str2'。在PHP中,您也可以將字符串與比較運算符進行比較。 – hakre

+0

@hakre:即將編輯我的答案,加上:) –

0
<?php if($poc2 && $poc2 === $poc1) echo "checked" ?>