用PHP过滤重复的电话号码

时间:2014-12-14 04:28:54

标签: php mysql

输出有重复的结果/行 - 过滤有问题。

在循环读取SQL结果时,输出必须满足以下条件:

条件1 :该邮件不包含任何电子邮件:/[a-z0-9_\-\+]+@[a-z0-9\-]+\.([a-z]{2,3})(?:\.[a-z]{2})?/i

条件2 消息必须包含葡萄牙语手机号码,9位数字, 从91,92,93或96开始,每组3个数字之间可以有空格:/(9[1236][0-9]) ?([0-9]{3}) ?([0-9]{3})/

910 000 000和920123123是有效的比赛。

条件3: preg_match结果(电话号码)不得重复,我的意图是如果某人有2个或3个帖子具有相同的电话号码,则仅输出第一个

如果9位数的电话号码已退出此周期,则输出第一个,跳过其余的电话号码,然后返回到周期。

$array = array();

while ($result = $query->fetch_array()) {
    $temp = array();
    if (preg_match('/[a-z0-9_\-\+]+@[a-z0-9\-]+\.([a-z]{2,3})(?:\.[a-z]{2})?/i', $result['message']) == false) {
        if (preg_match('/(9[1236][0-9]) ?([0-9]{3}) ?([0-9]{3})/', $result['message'], $temp)) {
            preg_replace(" ", "", $temp);
            foreach($temp as $value) {
                if ((array_search($value, $array) == false) && (strlen($value) == 9)) {
                    array_push($array, $value);
                    /*HTML OUTPUTS HERE*/
                }
            }
        }
    }
}

2 个答案:

答案 0 :(得分:1)

$array = array();
while ($result = $query->fetch_array()) {
    $temp = array();
    if (preg_match('/[a-z0-9_\-\+]+@[a-z0-9\-]+\.([a-z]{2,3})(?:\.[a-z]{2})?/i', $result['message']) == false) {
        if (preg_match('/(9[1236][0-9]) ?([0-9]{3}) ?([0-9]{3})/', $result['message'], $temp)) {
            $phone = str_replace(' ', '', $temp[0]);

            if (array_search($phone, $array) === false) {
                $array[] = $phone;
            }
        }
    }
}

一些注意事项:

    对于简单的非正则表达式替换,
  • str_replacepreg_replace快。
  • 当值在数组的第一个元素中时,
  • array_search可以返回0,因此您需要使用the === operator
  • 最后,由于完整的电话号码是foreach中的第一个元素,因此不需要上一个$temp循环。

答案 1 :(得分:0)

在您的查询中,我认为最好指明 DISTINCT 以删除重复结果。

e.g:

SELECT DISTINCT(*) FROM table_name WHERE 1;