2012-09-17 29 views
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); 
    } 
+0

這個fileList有多大? –

+0

我的第一個猜測是'while(!empty($ list)){}'是一個無限循環。 –

+0

[編號2](http://stackoverflow.com/questions/2313893/problems-with-php-when-trying-to-create-big-array?rq=1)在側邊欄相關.. –

回答

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

這看起來像一個無限循環給我。爲什麼$list永遠變空了?

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

因此,直到你打你的[256MB]內存限制,你會分配內存以array_push

2

問題是

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

因爲$list將永遠是空的,並因此造成死循環。 PHP試圖將越來越多的元素推入$genList,直到內存限制超過。

您可能想要刪除循環中的元素。

+0

我不'不明白爲什麼'$ list'永遠不會是空的。如果原始文本區域只有4個文件名值,'$ list'將包含4個數組值。第四次過後它會變空,對嗎? – thindery

+2

不,因爲在While循環中,你並沒有從列表中刪除任何東西。您正在讀取$ list [0]中的值,無限次:)。 在這種情況下,您可以像在moonwave99的答案中一樣遍歷列表。 –

相關問題