基于重复值php合并数组

时间:2016-02-10 06:16:02

标签: php mysql

我只是打印从mysql

获取的数据中的值
$sql = "SELECT * FROM tablename";
$res = mysql_query($sql);   
$rs = getAll($res);

for($k = 0; $k < count($rs); $k++)
{
    $email = $rs[$k]['emailid'];
    $name = $rs[$k]['name'];
    $content = "<table><tr><td>Name</td><td>Email</td></tr><tr>      <td>'.$name.'</td><td>'.$email.'</td></tr></table>";
}

现在$content看起来像这样。

--------------
Name    Email
--------------
n1      email1


--------------
Name    Email
--------------
n2      email2


--------------
Name    Email
--------------
n3      email1

现在我想根据常见电子邮件ID 合并html表格行。所以它应该看起来像

--------------
Name    Email
--------------
n1      email1
n3      email1


--------------
Name    Email
--------------
n2      email2

名称 n1 n3 基于'email1'合并。我如何实现这一目标?

2 个答案:

答案 0 :(得分:2)

选项1)您可以通过电子邮件订购,然后使用php填充某些数组来循环结果,验证电子邮件是否从prev更改,等等Rajdeb在其他答案中解释:

SELECT * FROM tablename ORDER BY EMAIL;

你得到:

n1        email1
n2        email2
n3        email1

选项2)您可以使用GROUP_CONCAT来检索通过电子邮件粘贴的名称。然后在php循环中,对于每个不同的电子邮件,您将用逗号分隔名称。这里执行的唯一任务是一个数组爆炸,以获取数组中的名称并放入表格单元格,每个电子邮件只循环一次,php工作量较少。通过电子邮件订购是可选的。

SELECT GROUP_CONCAT(NAME) AS NAME, EMAIL 
FROM tablename GROUP BY EMAIL ORDER BY EMAIL;

你得到:

n1,n3     email1
n2        email2

如果要将逗号符号更改为单独的名称,请使用&#34; - &#34;例如,您需要将SEPARATOR添加到以前的查询:

SELECT GROUP_CONCAT(NAME SEPARATOR '-') AS NAME, EMAIL 
FROM tablename GROUP BY EMAIL ORDER BY EMAIL;

你得到:

n1-n3     email1
n2        email2

希望这对你有所帮助! :)

答案 1 :(得分:1)

首先,在ORDER BY查询中添加SELECT子句,如下所示:

$sql = "SELECT * FROM tablename ORDER BY emailid";

使用$rs = getAll($res);进程获取结果集之后,就像这样:

// your code

$rs = getAll($res);

$prevEmail = '';
$content = '<table>';
for($k=0; $k < count($rs); $k++){
    $email = $rs[$k]['emailid'];
    $name = $rs[$k]['name'];
    if(empty($prevEmail)){
        $content .= '<tr><td>Name</td><td>Email</td></tr><tr><td>'.$name.'</td><td>'.$email.'</td></tr>';
        $prevEmail = $email;
    }else{
        if($prevEmail == $email){
            $content .= '<tr><td>'.$name.'</td><td>'.$email.'</td></tr>'; 
        }else{
            $content .= '</table><table><tr><td>Name</td><td>Email</td></tr><tr><td>'.$name.'</td><td>'.$email.'</td></tr>';
            $prevEmail = $email;
        }
    }
}
$content .= '</table>';
echo $content;

旁注:不要使用mysql_*函数,从PHP 5.5开始不推荐使用它们,并且在PHP 7.0中完全删除它们。请改用mysqlipdoAnd this is why you shouldn't use mysql_* functions