PHP脚本运行内存不足

时间:2017-10-11 17:37:25

标签: php

我的PHP代码应该生成1000个随机字,随机长度在3到7个字符之间。然后它应该将每个单词与我的词典中的所有单词engmix.txt进行比较,并将匹配放入一个数组,将所有不匹配放入另一个数组中。我知道代码功能正常,但是我试过运行它的两台计算机上的内存都耗尽了。我使用XAMPP作为我的网络服务器,甚至测试了删除内存限制,看它是否会运行。我想就如何优化此代码提出建议。

<?php

ini_set('memory_limit', '-1');

function getRandomWord($len = 10) {
    $word = range('a', 'z');
    shuffle($word);
    return substr(implode($word), 0, $len);
}

$words = array();

for ($i = 0; $i < 300; $i++) {
    $words[$i] = getRandomWord(rand(3, 7));
}

$matches = array();
$nonmatches = array();

$k = 0;

$dictionary = file("engmix.txt");

for ($i=0; $i < count($dictionary); $i++) { 
        for ($j = 0; $j < count($words); $j++) {
            if ($dictionary[$i] == $words[$j]) {
                $matches[$k] = $words[$j];
                $k++;
            } else {
                $nonmatches[$k] = $words[$j];
                $k++;
            }
        }
     }

?>

新的固定代码:

<?php

function getRandomWord($len = 10) {
    $word = range('a', 'z');
    shuffle($word);
    return substr(implode($word), 0, $len);
}

$words = array();

for ($i = 0; $i < 300; $i++) {
    $words[$i] = getRandomWord(rand(3, 7));
}

$matches = array();
$nonmatches = array();

$file = file("engmix.txt");

$i = 0;

$file_handle = fopen("engmix.txt", "r");

while (!feof($file_handle)) {
    $line = fgets($file_handle);
    $line = str_replace("\n", "", $line);
    $line = str_replace("\r", "", $line);

    for ($i = 0; $i < count($words); $i++) {
        if ($line == $words[$i]) {
            $matches[] = $words[$i];
        }
    }
}

fclose($file_handle);

$nonmatches = array_diff($words, $file);


print("<pre>");
print_r($matches);
print("<pre>");

print("<pre>");
print_r($nonmatches);
print("<pre>");

?>

0 个答案:

没有答案