热搜:NVER node 开发 php

大数组作数组下标时的问题

2024-09-13 19:40:02
大数组作数组下标时的问题

测试代码如下:

$int  = 135893597710;print_r($int);print_r(array($int=>1));


输出结果在windows上是135893597710Array ( [-1545355762] => 1 )
到linux的时候就能得到正确的结果135893597710Array ( [135893597710] => 1 )


请问如何可以在windows上得到正确的结果


回复讨论(解决方案)

<?php$int  = '135893597710';print_r($int);print_r(array($int=>1));?>

现在的问题是,生产服是linux,里面有一批数据是serialize处理后存储的,现在我导到本地后,没办法还原,因为里面有些数组的下标就是这种很大的数字。所以,如果我想在本地使用生产服的数据抢建测试环境,必须解决上面的测试代码的输出问题

你的 linux 是 64 位的?似乎也不应该出现这种问题
先不去管他吧,等有 64位 linux 的朋友测试以后再说
假定序列化后的是这样的串:a:1:{i:135893597710;i:123;}
则有

$s = 'a:1:{i:135893597710;i:123;}';$s = preg_replace_callback('/i:(\d{10,});/',  function($r) {    return sprintf('s:%d:"%s";', strlen($r[1]), $r[1]);  },  $s); //将大整数改成字符串print_r(unserialize($s)); //检查反序列化结果
Array
(
    [135893597710] => 123
)

生产服是Linux64位,但是我的windows也是64位呀,我还把php也换成64位的,未遂

目前决定先用楼上的办法吧,毕竟只是测试环境,能用就好了,先不纠结了。不过如果有朋友能找到真正的原因更好~

你的windows也是64位的?那么你能自己编译 php 吗?
php 并没有发行 for window 的 64位版本

php有第三方编译的x64
不过
测试最大int仍然是2^32-1 (win7 x64)

你的windows也是64位的?那么你能自己编译 php 吗?
php 并没有发行 for window 的 64位版本

我自己编译的64位php和网上下载的wamp64位版本,都不行

既然你能自己编译 php,那么请检查一下 64位编译开关打开没有
另外一定是要 VC9 以上的编译器,最好是 VC10 以上的