看板 PHP 關於我們 聯絡資訊
※ 引述《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)