Я создаю программу, которая проверяет, являются ли, казалось бы, случайные буквы на самом деле анаграммами связных слов.
Я использую файл .txt из URL-адреса, который содержит список наиболее часто используемых слов изНемецкий язык, который я конвертирую в массив $dictionary
, в котором каждый элемент эквивалентен одному слову.
$dictionary = file('https://bwinf.de/fileadmin/user_upload/BwInf/2018/37/1._Runde/Material/woerterliste.txt');
Затем я преобразую строку, набранную в поле, в отдельные слова в массиве, используя explode()
:
$str = $_POST["str"]; //name of the text field for the string
$words = explode(" ", $str);
Затем я определяю функцию is_anagram($a, $b)
, которая должна проверять анаграммы и эхо $b
в случае совпадения их символов:
function is_anagram($a, $b) {
if (count_chars($a, 1) == count_chars($b, 1)) {
echo $b . " ";
}
}
Для сравнения элементовВ обоих массивах я создаю цикл foreach
, в котором я использую функцию, упомянутую выше:
foreach ($words as $word) {
foreach ($dictionary as $dic) {
is_anagram($word, $dic);
}
}
Цикл должен отображать некоторые строки, которые можно найти в $dictionary
, если строка написана пользователемсодержит некоторые анаграммы.
Однако, когда я передаю несколько слов, которые, как я знаю, являются конгруэнтными анаграммами, программа ничего не отображает.
Еще более странноВ общем, когда я определяю $dictionary
как простой массив, а не использую файл .txt, например
$dictionary = ["ahoi", "afer", "afferent"];
, функция работает так, как и должна.
Я совершенно уверенв $dictionary
есть какая-то ошибка, возможно, из-за того, что файл .txt очень большой.Кто-нибудь знает как это исправить?