本文给大家分享一下php教程之如何生成大数组「考虑内存」

1.我们先来看一下,如果要生成1000000个元素的数组,对内存的消耗:

<?php
/**
 * 普通方式生成数组对内存的消耗
 */
$startMemory = memory_get_usage();
 
$arr = range(0, 1000000);
 
$endMemory = memory_get_usage();
 
echo round(($endMemory - $startMemory) / 1024 / 1024, 2) . PHP_EOL . 'mb';

结果如下:

34 mb

可以看到普通方式生成数组,对内存的消耗极大,一旦并发很容易造成内存不足

2.使用生成器原理生成数组对象的话,如下:

<?php
/**
 * 使用生成器构造生成对象,查看对内存的消耗
 * @param $start
 * @param $end
 * @param int $step
 * @return Generator
 */
function xrange($start, $end, $step=1)
{
    for($i=$start; $i<$end; $i+=$step)
    {
        yield $i;
    }
}
 
$startMemory = memory_get_usage();
 
foreach (xrange(0, 1000000) as $item)
{
    echo $item . '<br />';
}
 
$endMemory = memory_get_usage();
 
echo round(($endMemory - $startMemory) / 1024 / 1024, 2) . PHP_EOL . 'mb';

结果如下:

0 mb

使用生成器,可以看到对内存几乎无消耗,这是因为生成器只保存了构造数据的对象

简单分享php教程,感兴趣的小伙伴们需要更多资讯与教程欢迎关注编程学习网