2017-10-23 3 views
1

Ich habe diese foreach, die eine Postleitzahl $searchvalue zu einer Reihe von Bezirken passt. Die if-Anweisung erledigt ihre Aufgabe und wird erfolgreich ausgeführt, wenn keine else vorhanden ist.PHP Wenn/sonst immer zu sonst gehen, auch wenn IF erfolgreich ist

Allerdings, wenn ich die else auskommentieren, dann wird die else immer ausgeführt.

Warum ist das der Fall?

foreach ($districts['district'] as $district) { 
    if (in_array($searchvalue, $district['postalcodes'])) { //Search for known Postal Code 
     $emails[] = $district['email']; 

     //Assign new mail address 
     $notification['to'] = implode("",$emails); 

     //Continue sending email 
     return $notification; //this succeeds without the else below. When the Else is uncommented, this is not executed. 
    } 
    else { 
     //No known postal code found, fallback 
     echo "no valid postal code found, fallback"; 
     $notification['to'] = $defaultaddress; 
     return $notification; 
    } 
} 
+0

Zeigen Sie uns Ihren Datensatz, wir können nicht sagen, ob die if-Anweisung wahr ist. – GrumpyCrouton

+0

Ihre for-Schleife wiederholte viele Male das ist, warum sein gegangenes sonst Teil – Bhargav

+0

Was sind die Werte von '$ searchvalue, $ Bezirk [" postalcodes "]'? Kannst du vor dem if einen Dump machen? – teeyo

Antwort

6

Ihre foreach wird durch mehrere Datensätze zu treten, so dass einige gehen passen und manche nicht. Mit elsereturn etwas wird die Ausführung der foreach aufhören, so wird der erste nicht übereinstimmende Datensatz die Schleife stoppen, ohne den Rest der Einträge zu bewerten.

Sie scheinen es zu return $notification; zu wollen, ob es eine Übereinstimmung ist überall in der Anordnung, so bewegen sich die else Logik außerhalb des foreach:

foreach ($districts['district'] as $district) { 
    if (in_array($searchvalue, $district['postalcodes'])) { //Search for known Postal Code 
     $emails[] = $district['email']; 

     //Assign new mail address 
     $notification['to'] = implode("",$emails); 

     //Continue sending email 
     return $notification; //this succeeds without the else below. When the Else is uncommented, this is not executed. 
    } 
} 

//No known postal code found, fallback 
echo "no valid postal code found, fallback"; 
$notification['to'] = $defaultaddress; 
return $notification; 

(Randbemerkung: Sie betrachten wünschen können Was passiert, wenn mehrere Datensätze übereinstimmen.Im Moment würde nur der erste passende eine E-Mail erhalten - der Rest wird ignoriert werden.Ein returnkann nicht die ideale Aktion hier sein , abhängig von Ihren Zielen und den Daten.)

+1

keypoint: verschiebe den "unknown-code" hinter die foreach, nicht in den else-case. (sonst wird es nach dem ersten unbekannten Spiel zurückkehren) – dognose

+0

Thx Jungs! Ich kann nicht glauben, dass das so einfach war ... Es funktioniert jetzt :) @ceejayoz, es wird immer eine einzige Übereinstimmung geben, also ist der Code jetzt für den aktuellen Anwendungsfall korrekt. Vielen Dank! – Forza

Verwandte Themen