3

我有一个从我运行的 SQL 查询生成的数组。它如下所示:

$arr[$i]['id'] = $id;
$arr[$i]['name'] = $name;
$arr[$i]['email'] = $email;

如何从电子邮件列中获取唯一值?我很感激帮助。

4

6 回答 6

13

最好的答案是:

array_unique(array_column($arr, 'email'))
于 2018-11-27T13:09:05.923 回答
7

使用 MySQL 中的 DISTINCT 方法在您的列中过滤它,或者使用类似的东西

$uniqueEmails = array();
foreach($arr as $array)
{
    if(!in_array($array['email'], $uniqueEmails)
        $uniqueEmails[] = $array['email'];
}
于 2013-01-11T01:30:22.060 回答
6

自 PHP 5.5 起,还提供了一个名为array_column()的新函数。您可以通过以下方式使用它:

$allEmails = array_column($arr, 'email');
$uniqueEmails = array_unique($allEmails);
于 2016-02-01T06:25:52.333 回答
3

从比较特定键的数组中删除重复项

考虑相同的数组,但第三个索引的 id 不同:

$all_array = Array
(
    [0] => Array
        (
            [id] => 1
            [value] => 111
        )

    [1] => Array
        (
            [id] => 2
            [value] => 222
        )

    [2] => Array
        (
            [id] => 3
            [value] => 333
        )

    [3] => Array
        (
            [id] => 4
            [value] => 111
        )
)

现在,1 和 4 都具有相同的值。所以我们要删除它们中的任何一个:

$unique_arr = array_unique( array_column( $all_array , 'value' ) );
print_r( array_intersect_key( $all_array, $unique_arr ) );
于 2019-02-20T12:51:52.393 回答
0

如果您从 SQL 中获得按电子邮件排序的列表,您可以像 Gareth 那样通过循环遍历数组来提高性能,但只需将当前电子邮件地址与最后插入的电子邮件地址进行比较。下面是一个代码示例:

$uniqueEmails = array();
$lastemail = '';
foreach($arr as $array)
{
    if($array['email'] != $lastemail)
    {
        $uniqueEmails[] = $array['email'];
        $lastemail = $array['email'];
    }
}
于 2015-03-27T16:22:10.030 回答
0
if(!in_array($row,$data)){
  $data[]= $row;
}
于 2022-02-08T06:00:47.333 回答