Re: [請益] 詭異的array key問題
我自問自答
http://bugs.php.net/bug.php?id=34879
修正程式碼如下
http://0rz.tw/HaIDQ
http://0rz.tw/k3gzX
重編php後於64bit機器已正常~~~
原因為php於array相關函數操作時將ulong丟入uint造成~~~
※ 引述《roga (任性)》之銘言:
: ※ 引述《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
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.20.224.10
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 6 之 6 篇):