在php中模糊搜索数组

时间:2011-08-01 10:03:25

标签: php fuzzy-search

我搜索后发现如何在字符串

上进行模糊搜索

但我有一个字符串数组

$search = {"a" => "laptop","b" => "screen" ....}

我从DB MySQL中检索到了

是否有任何php类或函数对单词数组进行模糊搜索

或至少与某些有用信息的链接

我看到推荐使用PostgreSQL的评论

它是模糊搜索功能但是

该公司已经有一个MySQL数据库

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

可以在MySQL中执行此操作,因为你已经有了一个MySQL数据库 - How do I do a fuzzy match of company names in MYSQL with PHP for auto-complete?提到MySQL Double Metaphone implementation并且在SQL 5.0中有一个implementation用于MySQL 5.0 +

编辑:很抱歉在这里回答,因为评论不仅仅是...

由于您已经使用PHP Levenshtein function接受了答案,我建议您先尝试这种方法。软件是迭代的; PHP数组搜索可能正是您想要的,但您必须首先根据您的要求测试和实现它。正如我在your other question中所说的那样,在您键入解决方案时,解决方案可能是最简单的解决方案,它只是在用户输入时缩小产品范围。可能不需要实现任何模糊搜索,因为您使用用户进行模糊搜索: - )

例如,用户开始输入Sam,这样您就可以将产品缩小为以Sam开头的产品。因此,您始终只让用户选择您已知的产品才有效。

答案 1 :(得分:2)

查看Levenshtein function

基本上,它为您提供了字符串之间的差异(就成本而言)。即将字符串A转换为字符串B的成本是多少。

为自己设定一个阈值levenshein距离,两个词之下的任何东西都意味着它们是相似的。

同样Bitap algorithm更快,因为它可以通过按位运算符实现,但我相信你必须自己实现它,除非在某处有一个PHP库。

修改 使用levenshtein方法:

搜索字符串是“maptop”,您将“成本阈值”设置为2.这意味着您希望任何两个字符串转换操作的单词远离搜索字符串。

所以你循环遍历数组“A”字符串,直到

levenshtein ( A[i] , searchString ) <= 2

这将是你的比赛。 然而您可能会得到多个匹配的单词,因此您需要如何处理额外的结果。