如何从数字php爆炸国家代码

时间:2014-03-13 03:39:44

标签: php arrays explode

如何从数字php中爆炸国家代码,我需要1-3个字符来自国家验证。我有( code => country)的数组,我有脚本示例,但它只有在我爆炸1个字符时才有效,但国家代码也可以是2或3个字符。我知道我可以通过$number = explode(" ", 1 777777);进行爆炸,但我需要完整的数字而没有额外的符号或空格。

$number   = "1777777";
$we       = substr($number, 0, 2);
$countrys = array(
                  '1' => 'us',
                  '2' => 'uk',
                  '3' => 'de',
                  '44' => 'fi',    // dont work if 2 characters..
                  '123' => 'no'    // dont work if 3 characters..
                );
$array = "$we";
echo $country = $countrys[$array[0]];
echo "<br>country";

我如何修改此代码?谢谢!或任何其他建议?

3 个答案:

答案 0 :(得分:2)

我认为,如果数字与123777777相同,则国家/地区代码将被视为123,而不是121,如果1,{{1 }和12存在。

在这种情况下,首先检查123数组的前3位数字。如果没有找到,则继续检查前2位,依此类推。

countrys

答案 1 :(得分:0)

使用krsort对数组进行排序(最长的数字)。在这种情况下,将在“1”之前检查“123”。然后,您可以简单地遍历您的阵列并检查该号码是否以国家/地区的号码开头。如果匹配,请将国家/地区代码保存到变量:

$number = '123777777';

$countrys = array(
  '1' => 'us',
  '2' => 'uk',
  '3' => 'de',
  '44' => 'fi',
  '123' => 'no'
);

// sort the array by key, descending
krsort($countrys, SORT_NUMERIC);

// iterate over all countries
foreach ($countrys as $we => $ccode) {
  // if number begins with current number
  if (strpos($number, '' . $we) === 0) {
    // store country code and break the loop
    $country = $ccode;
    break;
  }
}

echo 'country: ' . $country; // expected: "no"

答案 2 :(得分:0)

在您的代码中,您始终将$countrys中的第一个国家/地区分配给$country。所以你总是会以我们结束。

您应该从您的电话号码中获取前3个,2个或1个数字,然后检查是否array key exists,而不是这样做。如果是,则将其用作数组的查找索引。

这是一个伪代码,供您开始使用:

perform a loop to get the first 3, 2, and 1 digit(s) from the phone number:  
  // Order is important as you want to match '123' before you match '1'  
  Check if the array key for the digit exists in the $countrys  
     If yes, get the country name and quit the loop  
     If not, go to the next less digit     

If the key is found:  
   Print the country name  
Else:  
   Print the country is not found  

以下是您如何为3位数执行此操作的部分代码。您只需添加循环(例如for-loop)即可简化您的工作。

$number = "123777777";

// Add your loop here to check for 3, 2, 1 digit
$we = substr($number, 0, 3);

$countrys = array(
    '1' => 'us',
    '2' => 'uk',
    '3' => 'de',
    '44' => 'fi',
    '123' => 'no'
);

$array = "$we"; // You don't need this

if (array_key_exists ($we, $countrys))
{
    // Remember to break out of your loop when the country is found
    $country = $countrys[$we];
}
else
{
    $country = "Non in list";
}
// End your loop here

echo "${we} is ${country}\n";