获得一个包含电话号码的数据,并且号码前面有国家/地区前缀,电话号码是动态的,可以是来自任何国家/地区的任何电话号码。 因此,我需要通过匹配变量中的某些字符(即电话号码前面的国家/地区前缀)与DB中的记录(国家/地区前缀将被提取到数组中)来保存所有国家/地区前缀来获取电话号码的国家/地区。
样品:
$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);
但是国家/地区的前缀长度不同。
很乐意为此提供帮助。
答案 0 :(得分: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);
}
答案 1 :(得分:1)
您可能会发现此schema有用。
如果您维护国家/地区代码的前缀地图,则编码很简单。 对前缀进行排序,从后面开始,以便在1之前尝试123.
答案 2 :(得分:1)
好的,这是状态机的完美示例!
最简单的方法:$prefixes = array('44' => 'UK', '1' => 'USA', '352' => 'IRELAND', '234' => 'NIGERIA');
preg_match('/^('.implode('|',array_keys($prefixes)).')/', $phoneVar, $matches);
echo $prefixes[$matches[0]];
答案 3 :(得分: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
答案 4 :(得分:0)
您可以使用preg_match():
$phoneVar = "abcdef";
$pattern = '/^44/';
preg_match($pattern, $phoneVar, $matches, PREG_OFFSET_CAPTURE, 3);
print_r("UK : ".$matches);
这可能意味着冗长的代码。但如果它只有4个国家,那么这将符合你的目的。