2014-01-18 92 views
1

有人能向我解釋爲什麼這個代碼奇怪的PHP輸出

$ar = [ 
    'item' => '−2', 
]; 

for ($i = 1; $i >= -2; $i--) { 
    foreach ($ar as $x => $y) { 
    if ($y == $i) { 
     echo $y . ' == ' . $i . "\n"; 
    } 
    } 
} 

主要生產

−2 == 0 
+0

你確定這是你的輸出?我剛剛運行完全相同的腳本,我得到-2 == -2。我複製粘貼這個代碼。 –

+0

@MarioSegura是的,我確定。你使用什麼PHP版本? – Vladimir

+1

@MarioSegura從不知情。事實證明,我最後的減號是一個特殊的UTF8字符。 – Vladimir

回答

3

數組值中的「 - 」實際上是Unicode字符'MINUS SIGN'(U + 2212),PHP不認爲它屬於數字字符串。 (它只識別U + 002D,即HYPHEN-MINUS,部分原因是它不支持該級別的UTF-8;對於股票PHP,所有字符串都是字節字符串。)由於它不是數字,並且字符串doesn 「噸甚至開始數值數據,其數值爲0。

如果刪除了統一劃線,而是輸入一個破折號(這應該進入一個ASCII),腳本應該正常工作。

+0

謝謝。這是問題所在。 – Vladimir

4

你得到的結果,因爲-2是一個字符串 - PHP不執行數值比較。將==更改爲===以使用嚴格比較,如果值及其類型等效,則只會返回true

+0

+1爲你的答案,但仍不知道爲什麼'-2 == 0'而不是'-2 == 1' –

+0

@mansoulx看看這個:http://www.php.net/manual /en/types.comparisons.php –

+0

是的。我不知道。謝謝 –

0

經過一番研究,我明白它是如何工作的。首先,從doc閱讀:

The value is given by the initial portion of the string. If the string starts with valid numeric data, this will be the value used. Otherwise, the value will be 0 (zero).

所以'-2'被視爲0因爲-(初始部分),因此if語句將被輸入只有當i == 0意思-2 == 0。然後回顯$y - $i