1

我正在研究 CakePHP 2.x,但现在我的问题与语法无关。我需要解决这个问题:我有一个名为messages的表,其中有一个字段名称mobile numbers。数字采用以下格式:

12345678 和 +9112345678 .. 所以它们都是一样的。唯一的区别是在一个号码中缺少国家代码。

因此,我在数据库中执行此查询:从消息表中选择不同的数字。现在它将这两个数字视为不同的。但我想要的是把这两个数字合二为一。我怎样才能做到这一点?在我的数据库中,有几个具有不同国家代码的数字。有些有国家代码,有些没有,但我想两者兼而有之。一个在国家代码中,另一个没有代码。如何才能做到这一点?

现在有时我有一个数组,其中存储了所有不同的数字。在这个数组中有这样的数字:12345678 +9112345678

所以现在我不知道如何制定一个逻辑,我可以将这些数字视为一个。如果有任何解决方案,请分享一些示例代码。

4

1 回答 1

2

我认为您不能在数据库级别执行此操作。

你必须做这样的事情:

  1. +创建一个包含所有国家代码(包括符号)的数组

  2. 从数据库中获取所有数字

  3. 对国家代码数组中的每个元素使用array_map()和在回调运行中strpos(),如果匹配,则从数字中删除国家代码

  4. 最后在第 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"
}
于 2013-07-05T18:00:36.707 回答