INF和NAN作为数组索引
问题描述:
我偶然发现了不寻常的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将是最大值正数,那么它会更合乎逻辑吗?
答
花车被截尾取整为PHP手册和这个答案Working with an array with periods in key values
之所以INF转换为0中陈述还是怪我。
+0
NaN是否内部存储为float? – 2014-09-03 13:41:10
“如果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