【问题标题】:need a simple programming logic solution..需要一个简单的编程逻辑解决方案..
【发布时间】:2013-07-05 17:40:59
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • “把这两个数字合二为一”?嗯?你的意思是123456789112345678?
  • 带国家代码的号码是否总是以+ 开头的符号?
  • 不..你误会了...看到这两个数字之间的唯一区别是国家一..一个有国家代码而另一个没有..所以这意味着它的手机一个人的数量...这就是为什么我想在我的视图页面上显示数字 opnce 而不是两者
  • SELECT DISTINCT(REPLACE(numbers , '+91', '')) AS FROM messages ;。我不确定它是否会起作用,但请尝试一下
  • 您现在对现有条目无能为力,但您应该在将新数字添加到数据库之前验证它们。

标签: php arrays cakephp logic cakephp-2.1


【解决方案1】:

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

你必须这样做:

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

【讨论】:

  • 我想我必须接受你的解决方案......谢谢......让我试试这个,尽管我之前从未使用过 array_map() 和 array_unique :p
  • 非常感谢...我正在努力...如果出现问题我会通知你
  • 使用国家代码...我没听懂...这不是 php 语法 ..这里函数($number)使用 $country_codes
  • 好吧,我已经尝试过您的示例 .. 问题仍然存在 .. 它正在打印两个数字,只是它从一个数字中删除了国家/地区代码 ...
  • 如果你说我可以告诉你我现在正在检查哪些数字
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-26
  • 2017-12-07
  • 2011-04-03
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
相关资源
最近更新 更多