我有一个从我运行的 SQL 查询生成的数组。它如下所示:
$arr[$i]['id'] = $id;
$arr[$i]['name'] = $name;
$arr[$i]['email'] = $email;
如何从电子邮件列中获取唯一值?我很感激帮助。
最好的答案是:
array_unique(array_column($arr, 'email'))
使用 MySQL 中的 DISTINCT 方法在您的列中过滤它,或者使用类似的东西
$uniqueEmails = array();
foreach($arr as $array)
{
if(!in_array($array['email'], $uniqueEmails)
$uniqueEmails[] = $array['email'];
}
自 PHP 5.5 起,还提供了一个名为array_column()的新函数。您可以通过以下方式使用它:
$allEmails = array_column($arr, 'email');
$uniqueEmails = array_unique($allEmails);
考虑相同的数组,但第三个索引的 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 ) );
如果您从 SQL 中获得按电子邮件排序的列表,您可以像 Gareth 那样通过循环遍历数组来提高性能,但只需将当前电子邮件地址与最后插入的电子邮件地址进行比较。下面是一个代码示例:
$uniqueEmails = array();
$lastemail = '';
foreach($arr as $array)
{
if($array['email'] != $lastemail)
{
$uniqueEmails[] = $array['email'];
$lastemail = $array['email'];
}
}
if(!in_array($row,$data)){
$data[]= $row;
}