我的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>");
?>