我偶然發現了不尋常的PHP行爲。INF和NAN作爲數組索引
首先,讓我說,這是純粹的興趣,從來沒有打算在生產中使用
$my_array = array(NAN => "one", INF => "two");
print_r($my_array);
結果是
Array
(
[-2147483648] => one
[0] => two
)
能取悅任何人解釋我是怎麼來
它們不會生成警告(特別是INF轉換爲0,覆蓋其他值Ë使用相同的密鑰如果有的話)
爲什麼NAN投射到-9,223,372,036,854,775,808在64位和32位-2,147,483,648機器上(最低只要你能搞定)
INF默默變爲零
我可以看到NAN和INF變成了那些數字,如果鑄造爲int,但是如果NAN將投射0,並且INF將是最大值正數,那麼它會更合乎邏輯嗎?
「如果NAN會投出0,它會更合乎邏輯嗎?」 - 不,因爲NaN不是數字,所以不應該將其轉換爲任何特定值而不是其他值。這些值並不意味着被視爲數字,文檔聲明他們沒有固定值:http://php.net/manual/en/math.constants.php – Sugar 2014-09-03 12:51:20
這似乎是系統/版本依賴當我嘗試你的代碼,如圖所示,我得到的數組只包含索引爲'-9223372036854775808'且值爲'two'的_one_元素,值'one'甚至不顯示。 – CBroe 2014-09-03 13:11:09
@CBroe,你能告訴我,如果你只是回聲(inf)NAN?難道你的NaN只是被忽略,或者它也被鑄造成-9223372036854775808? – 2014-09-03 13:35:44