3

電話番号を保持する変数を取得し、番号の前に国のプレフィックスがあり、電話番号は動的で、どの国のどの電話番号でもかまいません。そのため、変数内の特定の文字 (つまり、電話番号の前にある国プレフィックス) を、すべての国プレフィックスを保持する 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);

しかし、国は同じプレフィックス長を持っていません。

これについてお役に立てれば幸いです。

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

このスキーマは役に立つかもしれません。

プレフィックスから国コードへのマップを維持している場合、コーディングは簡単です。プレフィックスをソートし、後ろから開始して、123 が 1 の前に試行されるようにします。

于 2013-08-23T09:20:47.060 に答える
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 に答える
1

OK、これはステート マシンの完璧な例です。

最も簡単な方法:

$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 に答える
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 に答える