2017-10-23 17 views
1

私はこれがforeachです。これは郵便番号$searchvalueと地区の配列を照合します。 ifステートメントは、そのジョブを実行し、elseがない場合、正常に実行されます。もしIFが成功したとしても、PHP if/elseはいつも成功します。

ただし、elseのコメントを外すと、elseが常に実行されます。

なぜこのような場合は?あなたの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. 
    } 
    else { 
     //No known postal code found, fallback 
     echo "no valid postal code found, fallback"; 
     $notification['to'] = $defaultaddress; 
     return $notification; 
    } 
} 
+0

データセットを表示すると、if文が真であるかどうかはわかりません。 – GrumpyCrouton

+0

あなたのforループは何度も何度も繰り返されていますそれ以外の理由はあります – Bhargav

+0

'$ searchvalue、$ district ['postalcodes']'の値は何ですか? ifの前にダンプをすることはできますか? – teeyo

答えて

6

は、複数のレコードをステップ実行されようとしているので、一部が一致しようとしていると、いくつかはそうではありません。 elsereturnを実行すると、foreachの実行が中止されるため、一致しない最初のレコードは、残りのエントリをすべて評価することなくループを停止します。

あなたは試合はどこにでも配列であるかどうreturn $notification;にそれをしたいので、elseロジック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; 

(サイドノート:あなたが検討する必要があります何複数の記録が一致した場合今、唯一の最初のマッチングは1が電子メールを受け取ることになる起こるはず - 。。残りは無視されますreturnここに理想的な行動ではないかもしれませんあなたの目標とデータに依存します)。

+1

keypoint:else-caseではなく、foreachの後ろにある "unknown-code"を移動します。 (そうでなければ最初の不明なマッチの後に戻る) – dognose

+0

Thxみんな!これはとても簡単だったなんて信じられない...それは、コードが現在のユースケースのために正しくなりましたので、常に、単一の一致があるでしょう、今:) @ceejayozに動作します。ありがとう! – Forza

関連する問題