我想通过使用区号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;
是必需的!)