我认为您不能在数据库级别执行此操作。
你必须做这样的事情:
+
创建一个包含所有国家代码(包括符号)的数组
从数据库中获取所有数字
对国家代码数组中的每个元素使用array_map()
和在回调运行中strpos(
),如果匹配,则从数字中删除国家代码
最后在第 4 步完成后运行数字数组
array_unique()
代码:
$country_codes = array('+91', '+61');
$numbers_from_db = array('33445322453', '+913232', '3232', '+614343', '024343');
$sanitized_numbers = array_map(function($number) use ($country_codes){
if(substr($number, 0, 1) === "0") {
$number = substr($number, 1);
return $number;
}
foreach($country_codes as $country_code) {
if(strpos($number, $country_code) !== false) {
$number = str_replace($country_code, "", $number);
return $number;
}
}
return $number;
}, $numbers_from_db);
$distinct_sanitized_numbers = array_unique($sanitized_numbers);
测试和输出var_dump($distinct_sanitized_numbers)
是:
array(4) {
[0]=>
string(11) "33445322453"
[1]=>
string(4) "3232"
[3]=>
string(4) "4343"
[4]=>
string(5) "24343"
}