如何使用 PHP 制作大数组(26000 x 26000)?

Posted

技术标签:

【中文标题】如何使用 PHP 制作大数组(26000 x 26000)?【英文标题】:How to make big array (26000 x 26000) using PHP? 【发布时间】:2016-08-18 20:40:50 【问题描述】:

我尝试用 php 制作数组。数组的尺寸是 26000 x 26000。可以把数组做大吗?我已经尝试制作一个尺寸为 10000 x 10000 的数组,但程序一直告诉我:

致命错误:第 24 行 C:\xampp\htdocs\matrix\index.php 中的内存不足(已分配 1886388224)(试图分配 24 个字节)

我有 8GB RAM,我已经在 php.ini 中使用 -1(apache 配置)设置了 memory_limit。构建数组的代码是这样的:

function zeros($rowCount, $colCount)

    $matrix = array();
    for ($rowIndx=0; $rowIndx<$rowCount; $rowIndx++)
    
        $matrix[] = array();
        for($colIndx=0; $colIndx<$colCount; $colIndx++)
        
            $matrix[$rowIndx][$colIndx]=0;
        
        var_dump(memory_get_usage());
    
    return $matrix;


$matrix = zeros(25000,25000);

我也已经尝试过使用 SplFixedArray,但结果是一样的。 请帮助我,谢谢! :)

【问题讨论】:

我想知道您对如此大的数组的用例是什么。有没有可能,是的,虽然我希望你很快就会需要更多的内存,但有必要吗。 如果您使用的是直接数字索引,并且您事先知道数组的维度;为什么不考虑SPLFixedArray呢 我测试了从 100,100 到 600, 600:memoryUsage / arrayElements ≈ 200 Bytes 所以在你的情况下它需要 25000 * 25000 * 200 Bytes ≈ 100GB Essential reading if you're trying to work with large arrays in PHP 【参考方案1】:

这段代码你也可以用

    $mon = range(1, 26000);
    for($i=0;$i<=25999;$i++)
        $mon[$i]    =   range(1, 26000);
    

【讨论】:

以上是关于如何使用 PHP 制作大数组(26000 x 26000)?的主要内容,如果未能解决你的问题,请参考以下文章

PHP 中的 Vigenère 表

大数据工具苹果CMS 8.x(PHP)火车头发布模块制作教程

PHP如何生成大数组「考虑内存」

PHP如何生成大数组「考虑内存」

用 php 和 mongo 处理巨大的数组

如何使用 PHP 制作更轻的颜色版本?