1

入力に基づいてその場でいくつかのファイルを作成するために会社が使用するフォームがあります。テキストエリアが$fileStringあり、ファイル名を入力してからハードリターンを入力できます。それを取得して、配列を作成します$list。私がやろうとしているのは、テキスト領域に次のような 2 つのファイル名を入力した場合です。

item1

item2

次のように、2 つではなく 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空になることはなく、無限ループが発生するためです。$genListPHPは、メモリ制限を超えるまで、ますます多くの要素をプッシュしようとします。

おそらく、ループ内の要素を削除する必要があります。

于 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 に答える