2010-04-15 35 views
-1

當我比較兩個數組值時,我看到兩個看起來相同的字符串。 PHP不同意。爲什麼兩個數組值看起來相同,但不要評估爲相等?

$array1 = array('address'=>'32 Winthrop Street','state'=>'NY'); 
$array2 = array('address'=>'32 Winthrop Street'); 

$results = array_diff_assoc($array1, $array2); 

var_dump($results) 
//echos ['address'] => string(18) "32 Winthrop Street" ['state']=>'NY' 

這是爲什麼?

編輯 被告知,這是不實際的代碼我測試,我已經簡化代碼來說明我的問題,這是關於字符串相等,這個代碼不在於是否將運行。

+0

我不認爲它會運行,你錯過了一個'分隔符。 – alex 2010-04-15 12:39:57

+2

您應該採取措施確保您發佈的代碼實際上重現了問題,或者在解決問題時沒有多大用處。 – meagar 2010-04-15 13:30:05

回答

5

確保您的輸入數組看起來像這樣。如果您在瀏覽器中回顯數據,則可能會錯過空格。例如,'32 Winthrop Street'' 32 Winthrop Street'不相同。數組鍵的情況也是如此。

您可以$array1 = array_map('trim', $array1)$array2 = array_map('trim', $array2)從值中刪除前導和尾隨空白。看看這是否有所作爲?

您可以通過檢查if ($array1['address'] === $array2['address'])來檢查它們是否相同。如果評估結果爲錯誤,則說明存在差異,您只是沒有看到它(有關詳細說明可能原因,請參見binaryLV's answer)。如果它的計算結果爲true,你可能想仔細看看數組鍵。

+3

比較這兩個字符串的md5哈希將無濟於事。只需將值直接與「===」進行比較就可以完成這項工作。 – selfawaresoup 2010-04-15 14:18:52

+0

D'oh,這是真的。出於某種原因,我出現在更復雜的對象上(可能是由於整天處理DOM樹;而不是那種工作要容易得多)。 Fix'd! – pinkgothic 2010-04-15 15:32:46

+0

最後決定添加這個評論,因爲我認爲它可能實際上有助於突出顯示我的電線的* actual *源頭:'md5()'或其他散列函數當然是繞過'我的輸出介質不能正確顯示「。請記住,孩子們,不要想到一件事(輸出)並輸入其他(比較)! – pinkgothic 2010-06-09 08:58:20

0
$array1 = ('address'=>'32 Winthrop Street','state'=>'NY'); 
$array2 = ('address'=>'32 Winthrop Street'); 

$results = array_diff_assoc($array1, $array2); // remove the ' on this line 

'可能是混淆了PHP引擎,以爲這是一個字符串...那麼雪上加霜的是,你不要關閉「串」。

看起來像我的錯字。

+0

這是一個錯字,而不是實際代碼的一部分,但是謝謝 – kevtrout 2010-04-15 12:43:11

8

第一:你的代碼將不能運行,但在第2行這裏死在一個語法錯誤的修正版本:

<?php 
$array1 = array ('address'=>'32 Winthrop Street','state'=>'NY'); 
$array2 = array ('address'=>'32 Winthrop Street'); 

$results = array_diff_assoc($array1, $array2); 

var_dump($results); 

二:我用PHP 5.2.12和5.3.1,並測試了這個作品。它迴響:

array(1) { 
    ["state"]=> 
    string(2) "NY" 
} 

它真的只是充滿了不正確的語法。就這樣。

+0

我沒有複製實際測試過的代碼,我輸入了新代碼來描述我的問題。我的問題不是代碼不會運行,但爲什麼一個字符串看起來是平等的,而不是相等的。 – kevtrout 2010-04-15 13:07:50

+1

如果您沒有發佈實際的代碼,我們將無法解決您的問題。 – selfawaresoup 2010-04-15 13:53:56

3

這些值是硬編碼還是來自其他來源? var_dump($array1['address'], $array2['address'])給了什麼?也許在某個地方有一些「隱形」空間?

+0

我想知道「隱形空間」究竟是什麼意思...... – selfawaresoup 2010-04-15 12:51:17

+2

例如,「32」和「Winthrop」之間的兩個空格(而不是一個空格) - 在HTML中它們顯示爲單個空格。有時可能很難注意到。 – binaryLV 2010-04-15 12:53:09

相關問題