邮政编码开始时的运费如何? Javascript或PHP

时间:2016-06-24 13:43:26

标签: javascript php

我在英国有一个邮政编码列表,旁边有一个区域ID。现在,根据用户所在的区域,交付产品的成本更高。

例如,如果用户居住在伯明翰并且有一个以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中,因为我之后可以转换逻辑。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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;