7

我想创建一个 PHP 搜索功能,但使用类似 Google 的运算符。例如:

these words "this phrase" location:"Los Angeles" operator:something

重要的是,像 location: 这样的运算符支持在其中包含空格的值(因此在此示例中使用引号),因此我不能只拆分或使用标准标记。我想有人在某个时候为此创建了一个库,但我找不到。

或者,如果它不需要库,那​​么这样做的好方法会很好。

这只是我需要的搜索查询的解析;即从上面的查询中可以得到一个包含以下内容的数组:

[0] => these
[1] => words
[2] => "this phrase"
[3] => location:"Los Angeles"
[4] => operator:something

由此我可以为数据库构建一个搜索功能。

4

1 回答 1

14

您可以从str_getcsv()开始并使用空格作为分隔符,但您可能必须预处理 location & 运算符以处理特定情况下的引号。

<?php
$str = 'these words "this phrase" location:"Los Angeles" operator:something';

// preprocess the cases where you have colon separated definitions with quotes
// i.e. location:"los angeles"
$str = preg_replace('/(\w+)\:"(\w+)/', '"${1}:${2}', $str);

$str = str_getcsv($str, ' ');

var_dump($str);
?>

输出

array(5) {
  [0]=>
  string(5) "these"
  [1]=>
  string(5) "words"
  [2]=>
  string(11) "this phrase"
  [3]=>
  string(20) "location:Los Angeles"
  [4]=>
  string(18) "operator:something"
}
于 2013-03-03T22:02:19.170 回答