在数组中获取PHP列的唯一值

4

我有一个从我运行的SQL查询生成的数组,它看起来像这样:

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

如何从邮件列获取唯一值?感谢您的帮助。


请展示您所搜索的相关主题。 - Kermit
1
为什么不在你的SQL查询中使用过滤器呢? - cheesemacfly
无法在 SQL 上过滤我正在做的事情吗?我需要立即解决方案。抱歉。 - scriptdiddy
5个回答

17

最佳答案是:

array_unique(array_column($arr, 'email'))

7

可以在MySQL中使用DISTINCT方法在列中进行过滤,或者使用类似以下的方法:

$uniqueEmails = array();
foreach($arr as $array)
{
    if(!in_array($array['email'], $uniqueEmails)
        $uniqueEmails[] = $array['email'];
}

重复对一个不断增长的数组进行in_array()调用是不高效的。使用array_column()然后再使用array_unique()更加优雅,也可能更加高效。 - mickmackusa

6
自 PHP 5.5 版本起,新增了一个名为 array_column() 的函数。您可以按照以下方式使用它:
$allEmails = array_column($arr, 'email');
$uniqueEmails = array_unique($allEmails);

你只需要一行代码就可以做到这件事。 - Julien Baldy
2
这不是关于代码行数的问题。这个论坛的目标是帮助人们理解他们所犯的错误,并提供解决方案,以帮助他们理解。 - ksg91

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 ) );

1
这确实可以通过保留 $all_array 中的所有数组列来解决问题。谢谢! - KittMedia

0
如果您从 SQL 中获取按电子邮件排序的列表,可以通过像 Gareth 一样循环遍历数组来提高性能,但是只需将当前电子邮件地址与上次插入的电子邮件地址进行比较即可。以下是此操作的代码示例:
$uniqueEmails = array();
$lastemail = '';
foreach($arr as $array)
{
    if($array['email'] != $lastemail)
    {
        $uniqueEmails[] = $array['email'];
        $lastemail = $array['email'];
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接