作者roga (任性)
看板PHP
標題Re: [請益] 詭異的array key問題
時間Fri Jun 3 22:01:32 2011
※ 引述《tn801534 (踢恩)》之銘言:
: $test['9911815002']=1;
: $test['9911815003']=2;
: echo serialize($test);
: .......................................
: 以上三行簡單的程式碼在某一台主機上執行出來結果是
: a:2:{i:9911815002;i:1;i:9911815003;i:2;}
: index自動被轉成整數了...
如果一個 map 的 index/value 只有"數字"的話應該都是這樣
在 serialize 的時候,會被"簡化",
$test["9911815002"]=1;
$test["9911815003"]=2;
$test2['9911815002']=1;
$test2['9911815003']=2;
$test3[9911815002]=1;
$test3[9911815003]=2;
以上三種情況都一樣。
結果都是 a:2:{i:9911815002;i:1;i:9911815003;i:2;}
: 但正確應該是
: a:2:{s:10:"9911815002";i:1;s:10:"9911815003";i:2;}
這是 "真的結果" 還是 "手動打的" ?
一般來講,如果你的資料是
$test3["
a911815002"]=1;
$test3["9911815003"]=2;
就會變成 a:2:{
s:10:"a911815002";i:1;i:9911815003;i:2;}
如果是
$test2["9911815002"]="a";
$test2["9911815003"]=2;
就會變成
a:2:{i:9911815002;
s:1:"a";i:9911815003;i:2;}
所以請回去看看你 serialize 前後的資料各是什麼,如果不是純數字,
PHP 就會用 s: aa : "bb" 表示,其中 s 代表字串, aa 代表字串長度,
括弧內 "bb" 代表內容。
: 兩台php版本相同 一台32bit 一台64bit
: google大神了一下也找不出問題的所以然...
: 感覺上是環境變數的問題
查一下你的程式裡面有沒有 override_function 把 serialize 換掉了。
: 請問有人遇過相同的問題嗎~~~
--
The Internet: where men are men, women are men, and children are FBI agents.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.220.104.63
※ 編輯: roga 來自: 61.220.104.63 (06/03 23:22)
推 tn801534:我貼的都是真的執行結果喔 ~ 06/04 03:10
→ tn801534:目前好像是發現不同位元的INT_MAX不同的關係 06/04 03:11
→ roga:32bits/64bits的作業系統 INT_MAX 都是 2147483647 .. 06/04 12:18