我正在开发CakePHP 2.x,但现在我的问题与语法无关。我需要解决此问题的方法:我有一个名为消息的表,其中有一个字段名称手机号码。数字采用以下格式:
12345678 和 +9112345678 .. 所以它们都是一样的。唯一的区别是在一个数字中缺少国家/地区代码。
所以我在数据库中做这个查询:从消息表中选择不同的数字。现在,它将这两个数字视为不同的数字。但我想要的是把这两个数字作为一个数字。我该怎么做?在我的数据库中,有几个具有不同国家/地区代码的数字。有些有国家代码,有些没有,但我想将两者视为一个。一个在国家/地区代码中,另一个没有代码。如何做到这一点?
有时现在我有一个数组,其中存储了所有不同的数字。在这个数组中,有这样的数字:12345678 +9112345678
所以现在我不知道如何制定一个逻辑,我可以把这些数字作为一个数字。如果有任何解决方案,请分享一些示例代码。
我认为你不能在数据库级别做到这一点。
您必须执行以下操作:
-
创建所有国家/地区代码(包括
+
符号(的数组 -
从数据库中获取所有数字
-
对每个使用
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"
}