php 多维数组删除重复项

2022-08-30 19:37:10

不确定这个问题是否是需要删除的重复项,但我在其他地方找不到答案,所以我会去问。

我有一个如下所示的2d数组:

Array
(
[0] => Array
    (
        [0] => dave
        [1] => jones
        [2] => c@b.c
    )

[1] => Array
    (
        [0] => john
        [1] => jones
        [2] => a@b.c

    )

[2] => Array
    (
        [0] => bruce
        [1] => finkle
        [2] => c@b.c
    )
)

我想删除那些有重复电子邮件的电子邮件。所以在上面的例子中,我只想删除[][0]或[][2]。我不担心检查名称或类似的东西,我只需要根据单个值对子数组进行重复数据删除。

目前我有这样的东西

  if(is_array($array) && count($array)>0){
  foreach ($array as $subarray) {
    $duplicateEmail[$subarray[2]] = isset($duplicateEmail[$subarray[2]]);
    unset($duplicateEmail[$subarray[2]]);
   }
  }

但它只是不对。任何帮助赞赏。


答案 1

使用数组索引唯一性的快速解决方案:

$newArr = array();
foreach ($array as $val) {
    $newArr[$val[2]] = $val;    
}
$array = array_values($newArr);

注意1:从上面可以看到,使用电子邮件地址的最后一个匹配项而不是第一个。这可以通过将第二行替换为

foreach (array_reverse($array) as $val) {

注意 2:结果数组中的索引有些混淆。但我想这并不重要...


答案 2

更简单的解决方案。

$unique = array_map('unserialize', array_unique(array_map('serialize', $array)));

echo "<pre>";
print_r($unique);