需要简单的编程逻辑解决方案..

时间:2013-07-05 17:41:00

标签: php arrays cakephp logic cakephp-2.1

我正在开发CakePHP 2.x但是现在我的问题与语法无关。我需要一个解决这个问题的方法: 我有一个名为消息的表格,其中有一个字段名称移动电话号码。数字采用以下格式:

12345678和+9112345678 ..所以他们都是一样的。唯一的区别是,在一个数字中缺少国家/地区代码。

所以我在数据库中执行此查询: 从消息表中选择不同数字.. 现在它将这两个数字区分开来。但我想要的是将这两个数字作为一个。 我怎样才能做到这一点?在我的数据库中有几个具有不同国家代码的数字。有些人有国家代码而有些人没有,但我想把两者都当成一个。国家代码中的一个,没有代码的另一个。怎么办呢?

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

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

1 个答案:

答案 0 :(得分:2)

我认为你不能在数据库级别上这样做。

你必须做这样的事情:

  1. 创建所有国家/地区代码的数组(包括+符号)

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

  3. 使用array_map()和回调运行strpos()     国家/地区代码数组中的元素,如果匹配,则删除     来自号码的国家/地区代码

  4. 最后在第4步完成后,运行数字数组 array_unique()

  5. CODE:

    $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"
    }