作者roga (任性)
看板PHP
标题Re: [请益] 诡异的array key问题
时间Tue Jun 7 15:26:34 2011
※ 引述《tn801534 (踢恩)》之铭言:
: 我发现我把问题点搞错了
: 重新附上code如下
: --------------------------------------------
: $test["9911815002"]=1;
: $test["9911815003"]=2;
: $temp_RS = array_chunk($test, 1, true);
: print_r($temp_RS);
: echo PHP_INT_MAX;
: ===================================================
: 我发现於有问题的主机上印出的结果竟然是
: Array ( [0] => Array ( [1321880410] => 1 ) [1] => Array ( [1321880411] => 2 )
: ) 9223372036854775807
64bit 跑出来的结果?
是的话这台有问题,唯一解法大概是软体升一下 or 重新编译看看.. orz
: 但预期的结果应该是
: Array ( [0] => Array ( [9911815002] => 1 ) [1] => Array ( [9911815003] => 2 )
: ) 2147483647
: 我查看原本/usr/local/include/php/main/php.h内的定义两台主机都是如下~
要先看编译时有没有 limit.h
有的话,limit.h 里面定义的比 php.h 定义的更为优先
: #ifndef INT_MAX
: #define INT_MAX 2147483647
: #endif
: 感觉上是主机上没有将超过INT_MAX的数字转为字串,因为INT_MAX定义错了?
其实看 INT_MAX 是不对的,要看 LONG_MAX , PHP 内部整数的最大值 (PHP_INT_MAX)
其实是来自於系统的 LONG_MAX 。这个常数在 php 的 main.c 里面有宣告:
REGISTER_MAIN_LONG_CONSTANT("PHP_INT_MAX", LONG_MAX, CONST_PERSISTENT | CONST_CS);
但这真的很容易混淆,因为 32bit 的 INT_MAX 和 LONG_MAX 是一样的。
我原本偷偷在猜是不是你 32bit 那台是烂的,但看这个结果,是 64bit 这台烂了...
array_chunk 的确会影响整数的精确度,但你没有超过 64bit 的 PHP_INT_MAX
所以也很奇怪...orz
--
The Internet: where men are men, women are men, and children are FBI agents.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 202.89.121.16
※ 编辑: roga 来自: 202.89.121.16 (06/07 15:31)