作者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)
1F:推 tn801534:我贴的都是真的执行结果喔 ~ 06/04 03:10
2F:→ tn801534:目前好像是发现不同位元的INT_MAX不同的关系 06/04 03:11
3F:→ roga:32bits/64bits的作业系统 INT_MAX 都是 2147483647 .. 06/04 12:18