Использование текстовых файлов (большие списки, содержащие строки) для поиска анаграмм - PullRequest
0 голосов
/ 01 октября 2018

Я создаю программу, которая проверяет, являются ли, казалось бы, случайные буквы на самом деле анаграммами связных слов.

Я использую файл .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 очень большой.Кто-нибудь знает как это исправить?

1 Ответ

0 голосов
/ 01 октября 2018
$dictionary = file('https://bwinf.de/fileadmin/user_upload/BwInf/2018/37/1._Runde/Material/woerterliste.txt'); 

$ dictionary - это строка, а не массив в вашем примере.

$tmpfile = file_get_contents('https://bwinf.de/fileadmin/user_upload/BwInf/2018/37/1._Runde/Material/woerterliste.txt');
$dictionary=explode("\n",$tmpfile);
...