2016-06-24 48 views
1

我有一個英國郵政編碼列表,旁邊有一個地區編號。現在提供產品的成本更高,取決於用戶所在的地區。如果郵編以郵遞費用開始? Javascript或PHP

例如,如果用戶居住在伯明翰並且郵政編碼以B開頭,他將免費送貨,因爲該郵政編碼區域沒有有任何費用。

同樣,如果用戶有一個以IM開頭的郵編,他們必須支付更多郵遞費,因爲郵政編碼區域更多。

樣品郵政編碼列表:

Postcode | Region 
AL | A 
BA | A 
BB | A 
BD | A 
B | B 
BH | B 
LN | D 
LS | D 
IV1 | E 
IV23 | F 

從上面的例子中,如果用戶想獲得一個交付和他們的郵政編碼與BA開始,然後我想申請區域A的運費率

我實際上對於如何以編程方式執行此操作有點困惑。起初,我以爲我會簡單地做類似的東西:

$postcodes = [ 
    'AL'=>'A', 
    'BA'=>'A', 
    //And so on .... 
]; 

//get the first 2 letters 
$user_input = substr($user_postcode, 0, 2); 

if(array_key_exists($user_input,$postcodes)){ 
    //Get the region code 
    $region = $postcodes[$user_input]; 

    // Charge the user with the delivery rate specific to that user, then carry on 
} 

但問題是,一些類似的郵政編碼可以在不同的區域,因此,例如,IV1是區域E和IV23是區域F像上面看到的。

這意味着我必須匹配1,2,3或4個字符中的用戶郵政編碼。這可能沒有意義。更詳細地說明見下圖:

//From Birmingham and is in region B 
$user1_input = 'B'; 

//From Bradford and is in region A 
$user1_input = 'BD'; 

//From Inverness and is in region E 
$user1_input = 'IV1'; 

因此,如果用戶輸入是來自伯明翰和與B的用戶輸入開始,我怎麼能告訴大家,除此之外也開始爲B卻對郵政編碼中有其它字母,其使其成爲不同的郵政編碼。

我在盡我所能解釋,希望這確實有道理。如果不是,請詢問更多信息。

任何人都可以請幫助我的邏輯,我如何能夠實現這一目標?無論是在Javascript或PHP中,因爲我可以在之後轉換邏輯。

回答

1

如果你有什麼看起來像一個valid UK postcode,然後刪除空格,只是搜索陣列,直到你找到一個匹配:

$lookup = [ 
    '' => 'X', // in case no match is found 
    'AL'=>'A', 
    'BA'=>'A', 
    //And so on .... 
]; 

function get_delivery_for($postcode) 
{ 
    global $lookup; 
    for ($x=5; $x>0 && !$result; $x--) { 
     $result=$lookup[substr($postcode, 0, $x)]; 
    } 
    return ($result); 
} 

注意,上面的代碼的目的是爲了說明,我會建議使用更精細的東西,以避免投擲警告....

$result=isset($lookup[substr($postcode, 0, $x)]) 
     ? $lookup[substr($postcode, 0, $x)] 
     : false; 
1

一種選擇是按郵政編碼鍵的降序排列郵政編碼/區域數組。這樣,首先檢查更長(更具體)的鍵。以上面的列表中,它會成爲這樣的事情...

$postcodes = array(
    "IV23" => "F", 
    "IV1" => "E", 
    "LS" => "D", 
    "LN" => "D", 
    "BH" => "B", 
    "BD" => "A", 
    "BB" => "A", 
    "BA" => "A", 
    "AL" => "A", 
    "B" => "B", 
); 

之後你有,它是通過數組循環,檢查對所提供的郵政編碼匹配(從左邊開始)一樣簡單,當你找到一場比賽時停下來。

foreach($postcodes as $code => $region) 
{ 
    if($code == substr($user_postcode, 0, strlen($code))) 
    { 
     $shippingRegion = $region; 
     break; 
    } 
} 

echo $shippingRegion;