尝试创建数组时出现内存问题

时间:2012-09-17 16:00:09

标签: php

我有一个公司用来根据输入动态创建一些文件的表单。我有一个文本区$fileString,他们可以输入文件名,然后返回硬盘。我接受并创建一个数组$list。我想要做的是,如果他们在文本区域中输入两个文件名,如下所示:

item1

item2

它将创建一个包含6个值的数组,而不是两个,所以像这样:

$genList = array(item1_f, item1_b, item1_i, item2_f, item2_b, item2_i);

我在运行代码时收到此错误:

Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 24 bytes) in /home/dcolor/public_html/dev/create.php on line 18

第18行是:

array_push($genList, $list[0] . "_f", $list[0] . "_b", $list[0] . "_i");

我在这里做错了什么?代码

    $fileString = $_POST['fileList'];
    $unique = $_POST['unique'];
    $size = $_POST['size'];
    $generateArray = $_POST['generateArray'];
    $list = explode("\r\n",$fileString);

    if ($generateArray == "yes") {      
        if ($size == "5x7inimpos") {
            $genList = array();
            while (!empty($list)) {             
                array_push($genList, $list[0] . "_f", $list[0] . "_b", $list[0] . "_i");                    
            }
        }
        print_r($genlist);
    }

3 个答案:

答案 0 :(得分:3)

while (!empty($list)) {             
        array_push($genList, $list[0] . "_f", $list[0] . "_b", $list[0] . "_i");                    
}

$list永远不会被清空,你永远不会离开while循环。

您只想迭代列表:

foreach($list as $element)
{

    array_push($genList, $element . "_f", $element . "_b", $element . "_i");                    

}

答案 1 :(得分:2)

问题是

while (!empty($list)) {             
    array_push($genList, $list[0] . "_f", $list[0] . "_b", $list[0] . "_i");                    
}

因为$list永远不会为空,从而导致无限循环。 PHP尝试将越来越多的元素推送到$genList,直到内存限制超过。

您可能想要删除循环中的元素。

答案 2 :(得分:1)

这看起来像是一个无限循环。为什么$list会变空?

while (!empty($list)) {             
    array_push($genList, $list[0] . "_f", $list[0] . "_b", $list[0] . "_i");                    
}

因此,您将使用array_push分配内存,直至达到[256MB]内存限制。