2013-03-03 66 views
6

我想創建一個PHP搜索功能,但使用類似Google的運算符。例如:解析類Google搜索運算符的PHP庫?

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

,像運營商的位置是很重要的:帶空格的支持值(因此在本例中引號),這樣我就可以不只是一個拆分或使用標準令牌。我想像某個人在某個時候爲此創建了一個圖書館,但我找不到任何圖書館。或者如果它不需要圖書館,一個很好的方法來做到這一點是很好的。

這只是我需要的搜索查詢的解析;即,從上述查詢將是細以獲得由以下組成的數組:

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

從我可以建立與數據庫的搜索功能。

+0

如何有關的「位置‘操作者獨立的輸入’等 – 2013-03-03 21:57:26

+0

[PHP爆炸字符串,但治療在引號字作爲一個字(HTTP://計算器。 com/questions/2202435/php-explode-the-string-but-treat-words-in-quotes-as-a-one-word) – 2013-03-03 21:58:00

+0

@Dagon我寧願把它全部放在一個查詢中。 – Rsaesha 2013-03-03 22:24:36

回答

12

您可以從str_getcsv()開始,並使用空格作爲分隔符,但您可能必須預處理位置&運算符以處理該特定情況下的引號。

<?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" 
} 
+0

嗯,這給了我以下數組:[0] =>這些,[1] =>單詞,[2] =>這個短語,[3] =>位置:「Los,[4] => Angeles」, [5] =>運營商:東西 – Rsaesha 2013-03-03 22:19:29

+0

我表示會有預處理邏輯需要。我添加了一個簡單的預處理正則表達式。 – Coder1 2013-03-03 22:31:13

+0

太棒了!這工作得很好,正是我所期待的。 – Rsaesha 2013-03-03 22:33:24