PHP-使用引号优化搜索

时间:2016-12-21 15:25:06

标签: php

我通过在sql替换空格中使用LIKE语句来获取我在数据库中搜索的查询。

$in= str_replace(' ','%',$in);
example : 'harry potter is a great book' becomes 'harry%potter%is%a%great%book'

现在我希望通过允许用户使用谷歌这样的引号来优化我的搜索

' "harry potter" is a great book' become 'harry potter%is%a%great%book'

我想跳过引号内的空格,查询也可以包含多对引号。

' "harry potter" is a "great book"' become 'harry potter%is%a%great book'

1 个答案:

答案 0 :(得分:1)

这是一种快速而肮脏的方法:

$str = '"harry potter" is a "great book"';

// get all matches between quotes
preg_match_all('/".*?"/', $str, $matches);

// do your normal replacement, and remove quotes
$str = str_replace(' ', '%', $str);
$str = str_replace('"', '', $str);

// undo quoted replacements
foreach ($matches[0] as $value) {
    $value = trim($value, '"');
    $str = str_replace(str_replace(' ', '%', $value), $value, $str);
}

echo $str;

这将出局:

harry potter%is%a%great book

然而,这远非完美。例如,如果相同的短语出现不止一次,无论是引用还是未引用,那么它都不会为您提供您期望的结果。还有其他方法可以解决这个问题,但这只会增加复杂性。

正如Devon在评论中提到的,你应该考虑使用full-text search