3

有一个包含电话号码的变量,该号码前面有国家前缀,电话号码是动态的,可以是来自任何国家的任何电话号码。因此,我需要通过将变量中的某些字符(即电话号码之前的国家前缀)与数据库中的记录(国家前缀将被提取到一个数组中)进行匹配来获取电话号码的国家/地区前缀。

样本:

$phoneVar = '4477809098888';  // uk - 44
$phoneVar = '15068094490';  // usa - 1
$phoneVar = '353669767954';  // ireland - 352
$phoneVar = '2348020098787';  // nigeria - 234

如果为 $phoneVar 分配了任何电话号码值,则需要能够从中获取国家/地区前缀。

像这样的东西:

echo getCountryPrefix($phoneVar, $countries_prefix_array);

使用 substr 很容易实现这一点

// $countryPrefix = substr($phoneVar, 0, 3);

但是国家没有相同的前缀长度。

很高兴得到这方面的帮助。

4

5 回答 5

2

像这样的东西会起作用。

它可能对您的代码不准确,但我相信您可以看到逻辑。

function findCountryCode($number, $country_codes) {
    $country_codes = usort($country_codes, 'lsort');

    foreach ($country_codes as $key => $val) {
        if (substr($number, 0, strlen($val)) == $val)
            return $key;
    }

    return false;   

}


function lsort($a,$b) {
    return strlen($b)-strlen($a);
}
于 2013-08-23T09:19:32.783 回答
1

您可能会发现此模式很有用。

如果您维护国家代码的前缀映射,则编码是直截了当的。对前缀进行排序,从后面开始,以便在 1 之前尝试 123。

于 2013-08-23T09:20:47.060 回答
1

好的,这是状态机的完美示例!

最简单的方法:

$prefixes = array('44' => 'UK', '1' => 'USA', '352' => 'IRELAND', '234' => 'NIGERIA');
preg_match('/^('.implode('|',array_keys($prefixes)).')/', $phoneVar, $matches);
echo $prefixes[$matches[0]];
于 2013-08-23T09:21:02.963 回答
1

您可以像以下代码一样执行此操作:

$phoneVar = '4477809098888';  // uk - 44

$county_list = array('uk' => 44, 'usa' => 1, 'ireland' => 352, 'nigeria' => 234);

foreach ($county_list as $key => $value)
{
    if (preg_match('/^'.$value.'/', $phoneVar))
    {
        echo "Country is: ".$key;
        echo "Country code: ".$value;
        break;
    }
}

输出

Country is: uk
Country code: 44
于 2013-08-23T09:25:58.010 回答
0

您可以使用 preg_match() :

$phoneVar = "abcdef";
$pattern = '/^44/';
preg_match($pattern, $phoneVar, $matches, PREG_OFFSET_CAPTURE, 3);
print_r("UK : ".$matches);

这可能意味着冗长的代码。但是,如果它只有 4 个国家,那么这将达到您的目的。

于 2013-08-23T09:20:04.707 回答