PHP中数组的最大大小是多少?

新手上路,请多包涵

我们喜欢将数据库值存储在数组中。但是我们不知道 PHP 中允许的数组的最大大小?

原文由 Amruta 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
1 个回答

2,147,483,647 项, _即使在 64 位 PHP 上也是如此_。 (PHP 7.2.24)

(如果有人手边有最新的 PHP 8,我会对 64 位的值是否提高感兴趣。)

至少,您可以使用 array_fill()range() 拥有的最大数组似乎是 2^32-1 项目。虽然键可以是任何东西,包括超出该范围的数字,但如果从零开始,步长为 1,则最高索引可以是 2147483646。

如果您问这个问题,您可能会看到如下错误:

 # php -r 'array_fill(0, 2147483648, 0);'

PHP Warning:  array_fill(): Too many elements in Command line code on line 1

甚至:

 # php -r 'array_fill(0, 2147483647, 0);'

Segmentation fault (core dumped)

…或者,最有可能的是,明确提到“ 最大数组大小”的错误:

 php -r 'range(0,2147483647);'

PHP Warning:  range(): The supplied range exceeds the maximum array size:
start=0 end=2147483647 in Command line code on line 1


对阅读此问题的人的警告:

您遇到的最常见的地方是误用/滥用 range() 运算符,就好像它是一个迭代器一样。它在其他语言中,但在 PHP 中不是:它是一个数组填充运算符,就像 array_fill()

所以很有可能你可以完全避免使用数组。执行以下操作是不安全的:

 foreach (range($min, $max, $step)) { ... stuff ... }

而是这样做:

 for ($i = $min; $i <= $max; $i += $step) { ... stuff ... }

同样,我看到人们这样做:

 // Takes 3 minutes with $min=0, $max=1e9, $step=1.
// Segfaults with slightly larger ranges.
$numItems = count(range($min, $max, $step));

相反,它可以以更安全、惯用和高性能的方式重写:

 // Takes microseconds with $min=0, $max=1e9, $step=1.
// Can handle vastly larger numbers, too.
$numItems = ($max - $min) % $step;

如果您遇到有关数组大小的错误,则很有可能您正在做一些您可能应该避免的疯狂事情。

原文由 Dewi Morgan 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题