2017-04-10 2 views
-3

Ich versuche, eine erweiterte Suche Seite, wo die Verwendung der normalen Suche oder erweiterte Suche verwenden kann.PHP Fortschritt preg oder explodieren

pizza @Chicago #312 !IL *606 

Dies ist ein Beispiel für Fortschritt sucht, wird sich diese Suche nach einem Restaurant Namen, der das Wort „Pizza“ auf es zum Beispiel für „Pizza-Land“ hat. "@Chicago" wird das Filter-Such-Restaurant in Chicago eingrenzen. "# 312" sucht nach Restaurant-Telefon, Sie können auch 10-stellige Telefonnummer verwenden, zum Beispiel "# 3125436754". "! IL" wird Restaurant aus dem Bundesstaat Illinois suchen. "* 606" wird die Restaurant-Postleitzahl suchen, Sie können auch die 5-stellige Postleitzahl verwenden, zum Beispiel "# 60643".

Erweiterte Suchparameter sind @ für Stadt, ! für Bundesstaat, * Postleitzahl, # Telefonnummer.

Sie müssen nicht alle Suchparameter verwenden, wenn dies nicht erforderlich ist. Hier ist ein Beispiel für die Suche:

@Chicago Dies wird Restaurant-Stadt Chicago suchen.

#312654 *60644 Dies wird Restaurant mit der Telefonnummer "312654" innerhalb der Postleitzahl "60644" suchen.

Pasta !NY Dies wird Restaurantnamen suchen, die Wort Pasta innerhalb des Staates NY hat.

*60642 Dies wird Restaurant innerhalb von "60642" Postleitzahl suchen.

Pizza Land Dies ist eine normale Suche ohne Parameter.

Ich habe meine Datenbank bereit und kann die Suchabfrage aufschreiben. Problem ist, dass ich einzelne Suchtexteingabe verwende. Ich brauche PHP explode oder ähnliche Option für die Worttrennung. Wie ich schon sagte, es kann keinen erweiterten Suchparameter geben. Es kann eins oder zwei oder drei oder vier geben.

Ich brauche eine PHP-Funktion, um Parameter aus der Suchanfrage zu extrahieren.

+0

Wo ist Ihr Code? – Gert

+0

Sie könnten eine Regex verwenden, haben Sie es versucht? Das '*' muss entkoppelt werden. Sie können ein "Like" mit einem Joker verwenden. Wie werden Start/Ende festgelegt? – chris85

+0

Sie benötigen eine Funktion? Warum nicht eine Funktion schreiben? –

Antwort

0

Ich bin kein Experte mit Regex oder Preg, dank @ Chris85 habe ich die Funktion, die ich für meine Arbeit brauchte.

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; 
}