2017-04-10 3 views
-3

私は事前検索ページを作成しようとしています。PHPが事前に準備または爆発する

pizza @Chicago #312 !IL *606 

これは、あらかじめ検索の例であり、この検索は「ピザの土地」については、例えば、その上に単語「ピザ」を持っている任意の店舗名を探します。 "@Chicago"は、シカゴにあるフィルター検索レストランを絞り込んでいます。 "#312"はレストランの電話番号を検索します。例えば、 "#3125436754"のように10桁の電話番号も使用できます。 "!IL"はイリノイ州からレストランを検索します。 "* 606"はレストランの郵便番号を検索しますが、5桁の郵便番号も使用できます(例: "#60643")。

アドバンス検索パラメータは、市の場合@、状態の場合は!*郵便番号、#の電話番号です。

必須でない場合は、すべての検索パラメータを使用する必要はありません。検索の例を次に示します。

これは、レストランシカゴを検索します。

#312654 *60644これは、郵便番号 "60644"内の電話番号 "312654"のレストランを検索します。

Pasta !NYこれは、州のNY内に単語パスタを持つレストラン名を検索します。

*60642 "60642"郵便番号内のレストランを検索します。

Pizza Landこれはパラメータなしの通常の検索です。

データベースが準備できており、検索クエリを書き留めることができます。問題は、私は単一の検索テキスト入力を使用しています。私は、単語の分離のためのPHPの爆発または同様のオプションが必要です。私が言ったように、事前の検索パラメータはありません。 1つまたは2つまたは3つまたは4つあり得る。

検索クエリからパラメータを抽出するには、php関数が必要です。

+0

あなたのコードはどこですか? – Gert

+0

正規表現を使って試してみることができますか? '*'はエスケープする必要があります。あなたはワイルドカードで 'like'を使うことができます..どのように開始/終了が決まっていますか? – chris85

+0

機能が必要ですか?なぜ関数を書かないのですか? –

答えて

0

@ chris85のおかげで、私は正規表現やpregの専門家ではありません。自分の仕事に必要な機能を作りました。

function param($searchVal) 
{ 
    $output = array(); 
    if (strpos($searchVal, "@") !== false) { 
     preg_match('/@[a-zA-Z ]+/', $searchVal, $cityMatch); 
     $output["city"] = ltrim($cityMatch[0], '@'); 
    } 
    if (strpos($searchVal, "!") !== false) { 
     preg_match('/![a-zA-Z]{2}/', $searchVal, $stateMatch); 
     $output["state"] = ltrim($stateMatch[0], '!'); 
    } 
    if (strpos($searchVal, ":") !== false) { 
     preg_match('/:[0-9]+/', $searchVal, $zipMatch); 
     $output["zip"] = ltrim($zipMatch[0], ':'); 
    } 
    if (strpos($searchVal, "#") !== false) { 
     preg_match('/#[0-9]+/', $searchVal, $zipMatch); 
     $output["phone"] = ltrim($zipMatch[0], '#'); 
    } 

    preg_match('/^[a-zA-Z 0-9]+/', $searchVal, $queryMatch); 
    $output["query"] = $queryMatch[0]; 

    return $output; 
}