有人能向我解釋爲什麼這個代碼奇怪的PHP輸出
$ar = [
'item' => '−2',
];
for ($i = 1; $i >= -2; $i--) {
foreach ($ar as $x => $y) {
if ($y == $i) {
echo $y . ' == ' . $i . "\n";
}
}
}
主要生產
−2 == 0
有人能向我解釋爲什麼這個代碼奇怪的PHP輸出
$ar = [
'item' => '−2',
];
for ($i = 1; $i >= -2; $i--) {
foreach ($ar as $x => $y) {
if ($y == $i) {
echo $y . ' == ' . $i . "\n";
}
}
}
主要生產
−2 == 0
數組值中的「 - 」實際上是Unicode字符'MINUS SIGN'(U + 2212),PHP不認爲它屬於數字字符串。 (它只識別U + 002D,即HYPHEN-MINUS,部分原因是它不支持該級別的UTF-8;對於股票PHP,所有字符串都是字節字符串。)由於它不是數字,並且字符串doesn 「噸甚至開始數值數據,其數值爲0。
如果刪除了統一劃線,而是輸入一個破折號(這應該進入一個ASCII),腳本應該正常工作。
謝謝。這是問題所在。 – Vladimir
你得到的結果,因爲-2
是一個字符串 - PHP不執行數值比較。將==
更改爲===
以使用嚴格比較,如果值及其類型等效,則只會返回true
。
+1爲你的答案,但仍不知道爲什麼'-2 == 0'而不是'-2 == 1' –
@mansoulx看看這個:http://www.php.net/manual /en/types.comparisons.php –
是的。我不知道。謝謝 –
經過一番研究,我明白它是如何工作的。首先,從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
。
你確定這是你的輸出?我剛剛運行完全相同的腳本,我得到-2 == -2。我複製粘貼這個代碼。 –
@MarioSegura是的,我確定。你使用什麼PHP版本? – Vladimir
@MarioSegura從不知情。事實證明,我最後的減號是一個特殊的UTF8字符。 – Vladimir