输出有重复的结果/行 - 过滤有问题。
在循环读取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*/
}
}
}
}
}
答案 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_replace
比preg_replace
快。array_search
可以返回0
,因此您需要使用the ===
operator。foreach
中的第一个元素,因此不需要上一个$temp
循环。答案 1 :(得分:0)
在您的查询中,我认为最好指明 DISTINCT 以删除重复结果。
e.g:
SELECT DISTINCT(*) FROM table_name WHERE 1;