INF和NAN作为数组索引

问题描述:

我偶然发现了不寻常的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

花车被截尾取整为PHP手册和这个答案Working with an array with periods in key values

之所以INF转换为0中陈述还是怪我。

+0

NaN是否内部存储为float? – 2014-09-03 13:41:10