Re: [請益] 詭異的array key問題

看板PHP作者 (踢恩)時間13年前 (2011/06/07 15:49), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串6/6 (看更多)
我自問自答 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
文章代碼(AID): #1DxTV-L1 (PHP)
討論串 (同標題文章)
文章代碼(AID): #1DxTV-L1 (PHP)