在数组中重复数据如何过滤

时间:2014-05-09 21:16:36

标签: php arrays

这是我的基本数组:

Array (
[1] => array
(
    [name] => Name1
    [midname] => MidN1
    [lastname] => LastN1
    [email] => email_1@email1.com

)
[2] => array
(
    [name] => Name2
    [midname] => MidN2
    [lastname] => LastN2
    [email] => email_1@email1.com

)
[3] => array
(
    [name] => Name1
    [midname] => MidN1
    [lastname] => LastN1
    [email] => email_2@email2.com

)

)

正如您所看到的,在某些情况下我的名字和电子邮件是相同的,我们的想法是只显示一个数组如下

[1] => array
(
    [name] => Name1
    [midname] => MidN1
    [lastname] => LastN1
    [email] => email_1@email1.com

)
[3] => array
(
    [name] => Name1
    [midname] => MidN1
    [lastname] => LastN1
    [email] => email_2@email2.com

)

因为你可以看到名称是相同的但是电子邮件是不同的,所以这是想要从不同的电子邮件中获取所有信息,现在,问题是存储名称,中间名,姓氏和电子邮件在单个列中作为json数组: 所以首先我:

$q = "SELECT * FROM table";
$r=$con->query($q);
$res = mysqli_fetch_array($r);
$arrs = json_decode($res);
print_r($arrs);

这就是我得到数组的方式......并且它们以html显示为:
Name1 MidN1 LastN1 email_1@email1.com
Name2 MidN2 LastN2 email_1@email1.com
Name1 MidN1 LastN1 email_2@email2.com

这个想法只是为了得到:
Name1 MidN1 LastN1 email_1@email1.com
Name1 MidN1 LastN1 email_2@email2.com

我尝试使用array_unique($ array);但是返回空和array_unique($ array,SORT_REGULAR);将输出整个事物,[1] => array()...是行中的ID ...

感谢您抽出宝贵时间。

2 个答案:

答案 0 :(得分:0)

我编辑了我的答案。 你可以像这样迭代你的Json结果:

$my_array = array();
foreach ($arrs as $key => $value) {
    if (!in_array($value['email'], $my_array)){
        $my_array[] = $value['email'];
    }
}

但是我想知道为什么在数据库字段中存储Json字符串而不是每个属性使用一个字段......

答案 1 :(得分:0)

如果您无法更改表定义或查询,请使用快速解决方案: 1)创建一个数组,其中名字,中间名和姓氏是主键   (问题是两个John Junior Smith)

$arr= array (
'1' => array
(
'name' => 'Name1',
'midname' => 'MidN1',
'lastname' => 'LastN1',
'email' => 'email_1@email1.com'

),
'2' => array
(
'name' => 'Name2',
'midname' => 'MidN2',
'lastname' => 'LastN2',
'email' => 'email_1@email1.com'

),
'3' => array
(
'name' => 'Name1',
'midname' => 'MidN1',
'lastname' => 'LastN1',
'email' => 'email_2@email2.com'

)

);
$people = array();
foreach($arr as $v){
$people[$v['name'].' '.$v['name'].' '.$v['name']][] = $v['email'];
}
ksort($people); // if it is not ordered by mysql
echo '<table border="1">';
foreach( $people as $k => $val){
echo "<tr><td>$k</td><td>";
foreach($val as $email){
echo $email.'<br>';
}
echo '</td></tr>';

}
echo '</table>';

另一种解决方案是使用usort来定义排序标准。