PHP最好的方法是生成大型数组

时间:2014-07-28 18:36:21

标签: php arrays

我想生成一个带有增量键和空值的大型数组。

我试过了:

$array = array();

for($i=1; $i <= 1000000; $i++)
   $array[$i] = '';

print_r($array);

抛出异常:

Fatal error:  Allowed memory size of 2097152 bytes exhausted (tried to allocate 131072 bytes)

最有效的方式是什么?

7 个答案:

答案 0 :(得分:1)

要回答标题问题,请查看range功能:

$a = range(0,9);
print_r($a);

输出:

Array
(
    [0] => 0
    [1] => 1
    [2] => 2
    [3] => 3
    [4] => 4
    [5] => 5
    [6] => 6
    [7] => 7
    [8] => 8
    [9] => 9
)

你遇到的问题是你的内存不足。如果你真的需要一个很大的数组,请尝试增加memory limit

答案 1 :(得分:1)

使用range()

$arr = range(1,1000000);

但它仍然无法解决你的内存限制太低而无法包含你想要的数组大小的事实。没有办法解决这个问题。你正试图将一个游泳池的水倒入茶杯中,并想知道为什么它会溢出到处都是。

答案 2 :(得分:1)

这比循环更节省内存:

$array = array_fill_keys(range(1,1000000), '');

答案 3 :(得分:1)

首先增加你的内存大小。然后最有效的方法是使用SplFixedArray

适用于PHP&gt; = 5.3.0

$array = new SplFixedArray(1000000);

这样你就有了一个带NULL值的数组。

答案 4 :(得分:0)

如果您想为PHP脚本提供更多可用内存,可以增加可用内存:

http://php.net/manual/en/ini.core.php#ini.memory-limit

您可以在相关的php.ini配置文件中进行此更改,也可以在运行时使用ini_set使用memory_limit密钥进行此更改。

答案 5 :(得分:0)

如果只需要为一个脚本增加内存,可以使用ini_set();

ini_set('memory_limit','16M');

否则,您可以在php.ini中增加memory_limit

memory_limit = 16M

答案 6 :(得分:0)

更简单,更简单:

$array = array_fill(1, 1000000, '');

这仍然在2MB失败,因此至少将memory_limit更改为可能64MB更高的内容。