anagram finder program php mysql

时间:2012-07-24 06:14:40

标签: php mysql anagram

我正在尝试在php mysql中为anagram finder编写一个程序..我在数据库中有一个字典,它只有一个名为'word'的字段,它包含500000行。

通过使用php我试图从数据库逐个拉出单词。在得到一个单词后,我创建了2个for循环,执行逐字符比较..

例如..让输入的单词为'abcdef'..

考虑我从数据库中取出'fade'这个词。

我正在写一个循环并检查单词fade是否在abcdef中...如果是,我正在打印单词..如果没有,我将从数据库中取出下一个单词..

我写了代码..但我得到一个空页作为输出..请帮助..

我还有一个问题。有没有其他方法来找到一个单词的子串而不使用逐字符比较?

例如:如果我的输入是fedcba ..我将其排序为abcdef .. 和字典单词是淡入淡出,我把它排序为adef ..是任何函数来查找adef是否是abcdef的子字符串..

2 个答案:

答案 0 :(得分:2)

您必须编写自己的用户定义函数以获取已排序的字母串:

CREATE FUNCTION fn_sort_string(arg_word VARCHAR(255)) RETURNS VARCHAR(255)
BEGIN
    DROP TEMPORARY TABLE IF EXISTS temp;
    CREATE TEMPORARY TABLE temp(letter CHAR(1));

    SET @var_counter = 0;
    SET @var_len = LENGTH(arg_word);

    WHILE(@var_counter < @var_len)
    DO
        INSERT INTO temp VALUES (SUBSTRING(arg_word, @var_counter, 1));
        SET @var_counter = @var_counter + 1;
    END WHILE;

    SELECT GROUP_CONCAT(DISTINCT letter ORDER BY letter SEPARATOR '')
    INTO @var_sort_word
    FROM temp;

    DROP TEMPORARY TABLE IF EXISTS temp;

    RETURN IFNULL(@var_sort_word, "");
END;

以下查询将在排序的字典词中找到已排序的输入词:

SELECT * 
FROM dictionary 
WHERE fn_sort_string(input_word) LIKE CONCAT('%',fn_sort_string(word),'%');

答案 1 :(得分:1)

忘记检查PHP中的每个单词。那是CPU的噩梦!

在表格中添加第二列,并按字母顺序拼写单词。例如:

Word : AlphaWord
Test : estt

然后你可以简单地运行这样的查询:

select word from table 1 where AlphaWord = (select AlphaWord from table1 where word='$yourWord') order by word asc;

编辑:如果你不想匹配其他单词中的单词,你可以在AlphaWord列上弹出全文搜索索引,然后使用Match()... against()语法,它将非常快速地返回匹配。但是,由于此运算符仅允许将通配符放在搜索字符串的末尾,因此它不会与machete->aceehmtache->aceh匹配。话虽如此,说实话,你不能在正常搜索中添加一个符合它们的通配符。