2014-09-03 80 views
1

我偶然發現了不尋常的PHP行爲。INF和NAN作爲數組索引

首先,讓我說,這是純粹的興趣,從來沒有打算在生產中使用

$my_array = array(NAN => "one", INF => "two"); 

print_r($my_array); 

結果是

Array 
(
    [-2147483648] => one 
    [0] => two 
) 

能取悅任何人解釋我是怎麼來

  • 它們不會生成警告(特別是INF轉換爲0,覆蓋其他值Ë使用相同的密鑰如果有的話)

  • 爲什麼NA​​N投射到-9,223,372,036,854,775,808在64位和32位-2,147,483,648機器上(最低只要你能搞定)

  • INF默默變爲零

我可以看到NAN和INF變成了那些數字,如果鑄造爲int,但是如果NAN將投射0,並且INF將是最大值正數,那麼它會更合乎邏輯嗎?

+0

「如果NAN會投出0,它會更合乎邏輯嗎?」 - 不,因爲NaN不是數字,所以不應該將其轉換爲任何特定值而不是其他值。這些值並不意味着被視爲數字,文檔聲明他們沒有固定值:http://php.net/manual/en/math.constants.php – Sugar 2014-09-03 12:51:20

+0

這似乎是系統/版本依賴當我嘗試你的代碼,如圖所示,我得到的數組只包含索引爲'-9223372036854775808'且值爲'two'的_one_元素,值'one'甚至不顯示。 – CBroe 2014-09-03 13:11:09

+0

@CBroe,你能告訴我,如果你只是回聲(inf)NAN?難道你的NaN只是被忽略,或者它也被鑄造成-9223372036854775808? – 2014-09-03 13:35:44

回答