【发布时间】:2023-04-06 01:59:01
【问题描述】:
巧合的是,我遇到了关于 PHP 数组及其键的非常奇怪的行为。考虑创建一个 PHP 数组。
$arr[2250572483]=1;
//dump the array
var_dump($arr);
//Result:
array(1) { [-2044394813]=> int(1) }
数组键不知何故将其值更改为完全不同的负数。这导致我进行了一些进一步的调查,但仍然没有定论。
在下面的示例中,我在数字范围 2250572300 和 2250572500 之间循环。时间对我来说是稀缺的,所以我没有设法确定这种现象开始发生的数字,因为我在循环大量数字时耗尽了内存。我认为应该在 2100000000 到 4300000000 之间。
$arr2 = array();
for($i=2250572300; $i<= 2250572500; $i++){
$arr2[$i]=$i;
}
echo "<pre>".var_export($arr2,true)."</pre>";
我的问题是:有谁知道这是怎么发生的以及为什么会发生,目前有什么措施可以解决这个问题吗?
本质上这是 PHP 中的一个主要设计缺陷,当您使用数组中的数字(例如供应商、发票、商品编号等)时,可能会使 PHP 无用。
谢谢
【问题讨论】:
-
似乎对我有用:3v4l.org/6nD3C 和第二个例子:3v4l.org/Feooi