1

我有一个我的公司用来根据输入动态创建一些文件的表格。我有一个文本区域$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);
    }
4

3 回答 3

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");                    

}
于 2012-09-17T16:05:25.310 回答
2

问题是

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

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

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

于 2012-09-17T16:06:28.587 回答
1

对我来说,这看起来像是一个无限循环。为什么会$list永远变得空虚?

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

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

于 2012-09-17T16:05:16.933 回答