【问题标题】:Maximum integer index in PHP arrayPHP数组中的最大整数索引
【发布时间】:2015-02-15 07:57:20
【问题描述】:

以下PHP代码

<?php
  $x[5076021987]=1234;
  var_dump($x);
?>

32bit 架构上产生以下结果:

array(1)
{
   [781054691]=>int(1234)
}

64bit 架构上的正确结果:

array(1)
{
   [5076021987]=>int(1234)
}

我有什么办法可以让它在32bit arch 上正常工作吗?请注意,在我的情况下,将长整数转换为字符串不是解决方案。谢谢。

【问题讨论】:

  • 使用字符串而不是文字整数。这与它用作数组键无关。整数在数组赋值之前已经被 chomped 了。
  • 正如我所写,转换为字符串对我来说不是解决方案。此外,$x=5076021987+1 在 32 位上正确计算为 5076021988,所以我真的不明白为什么 PHP 在计算上可以正常工作,但在数组索引上却错误。
  • 5076021988 只是一个打印为整数的幸运浮点数:使用 var_dump($x)。而且您还没有真正解释为什么您不能使用字符串。 (无论如何,数组在内部将键存储为字符串。)
  • 我认为你使用的是 windows 服务器
  • 不,使用 32 位 ubuntu

标签: php integer int 32bit-64bit


【解决方案1】:

检查完所有内容后,php documentation

键可以是整数或字符串。

检查Syntax section

事实证明,您必须使用String 作为索引。肯定没有别的办法了。

如果你确切地展示了你是如何获得这些指数的,或者你正在尝试做什么的更多信息,我可以提出其他建议。

唯一可能的解决方案是将索引转换为float

<?php
    $index = 5076021987*1.0;
    $x[$index]=1234;
    var_dump($x);
?>

这可能行不通。因为,php 在将其用作索引时会将其转换回integer。我没有 32 位电脑,所以无法测试。

如果这不起作用,你唯一的希望就是

<?php
    $index = 5076021987+0.1; // or even 5076021987*0.1
    $x[$index]=1234;
    var_dump($x);
?>

然后以某种方式使用它。

除此之外,您没有任何其他选择(除了转换为您不喜欢的字符串)。

【讨论】:

  • 如果您要将某些内容转换为浮动,请使用 (float)$index = (float) 5076021987
  • 是的,但如果用作索引,它将重新转换为 int。 php.net/manual/en/language.types.array.php
  • @Neil,你的例子对我来说毫无意义。分配 $x[]=1234 只是在下一个可用索引处添加值,如 $x[0]=1234 如果 $x 尚未定义。无论如何,使用您可能打算建议的 $x[$index] 并不能解决问题。
  • 是的..我想通了..我已经提到过..你可以试试第二个..如果你显示更多代码,或者显示你到底想做什么,也许我可以提出更好的建议
  • 你的第二个方案也是一样,索引显示为781054691
猜你喜欢
  • 2020-02-27
  • 2021-11-29
  • 2014-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-12
  • 2017-10-20
  • 1970-01-01
相关资源
最近更新 更多