2016-06-20 10 views
0

Ich habe ein kleines PHP-Skript, das perfekt funktioniert, so dass, wenn eine Person eine EXACT-Übereinstimmung in ein Formularfeld eingibt, mein PHP-Skript auf eine Website umleiten wird.PHP mit einem Array wechseln

Allerdings möchte ich lernen, wie Sie die gleiche Funktionalität hinzufügen, aber nicht auf einen exakten Ausdruck, sondern auf eine Reihe von Wörtern. Beispiel: Wenn eine Person eine Abfrage eingibt, die eines der Wörter "Kuchen, Teig und roter Farbstoff" enthält, wird das Skript auf eine Webseite umgeleitet (z. B. wie mache ich Kuchen nur mit rotem Farbstoff und Butter), aber wenn die Abfrage hat grünen Farbstoff drin, dann wird das Skript auf eine andere Seite umleiten.

Hier ist der Code, den ich jetzt genaue Übereinstimmung Fall haben:

<?php 
switch ($_REQUEST['zip']) { 
case 'where is cape lookout': 
case 'how far is cape lookout': 
header("Location: http://www.example.com/cape-lookout"); 
break; 
case 'where is cape hatteras': 
case 'how far is cape hatteras': 
    header("Location: http://www.example.com/cape-hatteras"); 
    break; 
default: 
    header("Location: http://www.example.com/search-404"); 
    break; 
    } 
    ?> 
+2

Sie wären wahrscheinlich besser dran (auf einer wirklich einfachen Ebene), indem Sie einfach etwas wie Google Custom Search auf Ihre Website löschen. – CD001

+0

Es gibt eine Menge künstlicher Intelligenz, die beim Schreiben von Code für diese Art von Suche involviert ist. * Wie mache ich Kuchen-Teig mit nur rotem Farbstoff und Butter * warum das Rad neu erfinden? –

Antwort

0

Wenn Sie yor Design mit der switch Aussage behalten möchten, können Sie die Falldefinition zu einer Funktion delegieren können.

Diese Funktion würde die Suchanfrage akzeptieren und den Fallnamen zurückgeben.

Sie müssten auch die Schlüsselwörter für jeden Fall manuell definieren. Dies könnte durch eine andere Funktion erfolgen.

$query = "How do I make cake batter using only red dye and butter"; 

function defineCase($query) 
{ 
    //Split the search query by a space character 
    $queryArray = explode(' ', $query); 
    //Iterate through the search cases 
    foreach (getCases() as $case => $keywords) { 
     //if all the search terms are present, return the case name 
     if (count(array_diff($keywords, $queryArray)) === 0) { 
      return $case; 
     } 
    } 
} 

function getCases() 
{ 
    //Define here the keywords that must be present in the search query 
    return [ 
     'cakes' => ['cake', 'batter', 'red', 'dye'], 
     'pies' => ['flour', 'pastry', 'crust'] 
    ]; 
} 

$case = defineCase($query); 

switch ($case) { 
    case 'cakes': 
     //process 
     break; 
} 

Diese Lösung ist ziemlich einfach und gibt Ihnen nur einen Hinweis, wie Sie verarbeiten könnten. Es behandelt nur Wörter, keine Ausdrücke. Sie müssten sich um die ordnungsgemäße Säuberung und Aufteilung der Suchabfrage kümmern.