2016-07-12 14 views
1

ich alle möglichen Dinge im Array überprüfen, um zu sehen, ob es etwas aus den angegebenen Daten enthält.PHP-Array, dann überprüfen, ob in Daten

Array:

$dogs = [ 
    "terrier" => "Terrier", 
    "german_shepard" => "GS", 
]; 

Code:

if ($stmt->execute()){ 
    while ($request = $stmt->fetch(PDO::FETCH_ASSOC)){ 
     foreach($dogs as $x => $x_value){ 
      if (strpos($request['Data'], $x) !== false) { // This bit!! 
       $dog = $x_value; 
      } else { 
       $dog = 'Unknown dog'; 
      } 
     } 
    } 
} 

ich dann eine Liste haben, kann es die erste in der Liste in Ordnung erkennen, aber andere es nennt nur 'Unknown Hund' Beispiel:

1 - Terrier

2 - Unbekannt Do g

3 - Unbekannte Hunde

ich es will wie erscheinen:

1 - Terrier

2 - GS

3 - GS

Ich möchte die Liste zu ap Birne für jeden gefundenen Wert.

+0

Sie könnten var_dump oder print_r $ Anfrage, um zu sehen, was Sie bekommen. Uns zu zeigen, würde uns helfen, Ihnen zu helfen ... – nerdlyist

+1

Mein erster Gedanke ist: Haben Sie 'german_shepard' in der Datenbank? – FirstOne

+0

Es ist immer noch unklar. Was sind die Werte in der Datenbank gespeichert? Und basierend auf welcher Logik sind Sie bereit, diese Liste zu drucken? –

Antwort

2

Sie sind für jedes Element die $dog Variable Überschreiben in $dogs überprüft, so dass, wenn irgendetwas gibt, die nicht nach dem man überein, die übereinstimmt, Es wird auf 'Unknown dog' zurückgesetzt. Sie sollten $dog auf einen Standardwert vor Ihrer Schleife setzen und nur überschreiben, wenn es gefunden wird.

$dog = 'Unknown dog'; 
foreach($dogs as $x => $x_value){ 
    if (strpos($request['Data'], $x) !== false) { // This bit!! 
     $dog = $x_value; 
    } 
} 

Es kann mehr als ein Wert in $dogs sein, die eine bestimmte Instanz von $request['Data'] entspricht. Wenn Sie diesen Code verwenden, wird $dog auf den letzten Wert von $dogs gesetzt, der $request['Data'] entspricht. Wenn Sie möchten, dass es auf den ersten übereinstimmenden Wert gesetzt wird, fügen Sie nach $dog = $x_value einen break; hinzu; Wenn Sie etwas anderes als das Erste oder das Letzte wollen, muss es komplexer sein.

+0

Randnotiz: Versuchen Sie beide Schleifen zu brechen, um unnötige Iterationen zu vermeiden. +1 – FirstOne

+0

Verdammt es tut mir leid, dass Sie richtig sind. Ich machte die Antwort mit einer Pause und realisierte dann, was das macht ... – nerdlyist

+0

@FirstOne Ich fügte eine Erklärung hinzu, wie 'break' hier verwendet werden könnte. –

-1

Sie können PHP native in_array Funktion:

$dog = 'Unknown dog'; 
$key = in_array(strtolower($request['Data']), $dogs); 
if($key >= 0){ 
    $dog = $dogs[$key]; 
} 
+0

Es gibt ein _case-insensitive_ 'strpos': [** stripos **] (http://php.net/manual/en/function.stripos.php). – FirstOne

+0

BTW .. nicht mein Downvote – FirstOne

Verwandte Themen