我想通过使用区号mysql数据库从电话号码字符串中分离区号。

例如,字符串为0349152023
最终结果应为03491 52023

为了获得结果,我想分割字符串并搜索数据库中的每个数字。
例如,先按0,再按3,再按4,然后获取最后找到的结果。

我目前使用的代码只是为进一步的操作准备电话号码字符串:

$phone1 = preg_replace('/[oO]/', '0', $phone-string);

$phone2 = preg_replace("/[^0-9]/", "", $phone1);


然后我使用str_split将字符串切成碎片:

$searchArray = str_split($phone2);


谢谢你的帮助。

最佳答案

步骤1:从db中选择所有区号,然后将它们放入数组$areaCodes

步骤2:将$ areaCodes迭代为$ code,然后检查电话号码是否以$ code开头。如果是这样,请创建一个在代码和数字的其余部分之间具有空格的字符串

$phonenumber = '0349152023';

$preparedPhonenumber = '';
foreach($areaCodes as $code){
    if(str_pos($phonenumber, $code) === 0){
        // phonenumber starts with areacode

        $phoneWithoutCode = substr($phonenumber, strlen($code));
        $preparedPhonenumber = $code.' '.$phoneWithoutCode;

        break;
    }
}
// if one of the areaCodes was 0349,
// the variable $preparedPhonenumber is now '0349 152023'


编辑:您可以通过仅选择以特定字符串开头的代码来缩短从db返回的区号的数量。

假设德国最短的区号长3位(我认为是正确的)。

$threeDigits = substr($phonenumber,0,3);
$query = "SELECT * from areacodes
         WHERE code like '".$threeDigits."%'
         ORDER BY CHAR_LENGTH(code) DESC";


这将大大缩小可能的区号数组,从而使脚本更快。

编辑2:在查询中添加了order by子句,因此上述代码将首先检查较长的区号。 (现在,foreach循环中的break;是必需的!)

10-07 20:48