php:在数组中查找变量字符

时间:2013-08-23 09:12:42

标签: php variables

获得一个包含电话号码的数据,并且号码前面有国家/地区前缀,电话号码是动态的,可以是来自任何国家/地区的任何电话号码。 因此,我需要通过匹配变量中的某些字符(即电话号码前面的国家/地区前缀)与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);

但是国家/地区的前缀长度不同。

很乐意为此提供帮助。

5 个答案:

答案 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个国家,那么这将符合你的目的。