2017-02-15 11 views
0

私は3つの異なる領域MyArea1、MyArea2、MyArea3を持っています。これらのそれぞれには、ポストコードの配列があります。郵便番号が複数の配列にあるかどうかを確認しますか?

$myArea1=array("AB1","AC2","AD1"); 
$myArea2=array("BC1","BC2","BC3"); 
$myArea3=array("CD1","CD2","CD3"); 

以下の "BC2 4YZ"のようなチェックコードが必要です。

それは完全な一致をチェックすると、次は動作しません:私は作品次のことを持っている

if (in_array($row['postcode'], $myArea1)) { $Area = 'Area 1'; } 
else if (in_array($row['postcode'], $myArea2)) { $Area = 'Area 2'; }  
else if (in_array($row['postcode'], $myArea3)) { $Area = 'Area 3'; } 
else { $Area = 'No Match'; } 

foreach ($myArea1 as $myArea1pc) { 
    if (strpos($row['postcode'],$myArea1pc) !== false) { 
     $Area = 'Area 1';     
    } 
} 

しかしこれをループの方法がありますすべて私の配列ですか?

編集:時々、私の配列に "BC24"のようなポストコードがあるかもしれません。

+0

'$ row ['postcode']'は文字列「BC2 4YZ」を含んでいますか? – RomanPerekhrest

+0

@RomanPerekhrestはい、明らかに各行で異なりますが、その例ではBC2 4YZ、BC24YZ、BC2 4YX、bc24yzなどですが、BC2が含まれます。 – BN83

+0

すべての配列で一致するものが見つかるか、最初に見つかったら停止しますか? – RomanPerekhrest

答えて

2

私はこのためにin_arrayを使用しようとします。

$input = $row['postcode']; 

$areas = array(
    'Area 1' => array("AB1","AC2","AD1"), 
    'Area 2' => array("BC1","BC2","BC3"), 
    'Area 3' => array("CD1","CD2","CD3"), 
); 

// Take out the first 3 letter: 
$part = substr(trim(str_replace(' ', '', $input)), 0, -3); 

$Area = 'No match'; 
// Find which "area" array contains it 
foreach ($areas as $k => $v) { 
    if (in_array($part, $v)) { 
     $Area = $k; 
     break; 
    } 
} 
+0

唯一の問題は、これはオリジナルの投稿に言及していない私のせいで、時には "BC24 4YX"のように郵便番号の最初の部分に4文字ある場合があります。最初の3文字は " BC2 " – BN83

+0

常にスペースで区切られていますか? – lionel

+0

必ずしも芽ではなく、まったく分離されないこともあります。私はあなたがやったことを演奏していて、これがうまくいくかどうか疑問に思っていた:foreach($ postcodes as $ a => $ b){foreach($ b as $ c){if(strpos $ row ['postcode']、$ c)!== false){$ Area = $ a; } else {$ Area = 'No Match'; }}} 'しかし、私は、ポストコードを区切るカンマがないので、strposは機能しないことがわかりました... – BN83

関連する問題