php多维数组删除重复

Kev*_*ody 19 php arrays multidimensional-array

不确定这个问题是否需要删除,但我无法在其他地方找到答案,所以我会问一下.

我有一个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
    )
)
Run Code Online (Sandbox Code Playgroud)

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

目前我有这样的事情

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

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

Dan*_*oap 28

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

$newArr = array();
foreach ($array as $val) {
    $newArr[$val[2]] = $val;    
}
$array = array_values($newArr);
Run Code Online (Sandbox Code Playgroud)

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

foreach (array_reverse($array) as $val) {
Run Code Online (Sandbox Code Playgroud)

注意2:结果数组中的索引有点混淆.但我想这没关系......


Dip*_*mar 15

更简单的解决方案.

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

echo "<pre>";
print_r($unique);
Run Code Online (Sandbox Code Playgroud)


rob*_*lls 8

array_unique()的用户注释有一些解决方案.例如

    function multi_unique($array) {
        foreach ($array as $k=>$na)
            $new[$k] = serialize($na);
        $uniq = array_unique($new);
        foreach($uniq as $k=>$ser)
            $new1[$k] = unserialize($ser);
        return ($new1);
    }
Run Code Online (Sandbox Code Playgroud)

来自http://uk.php.net/manual/en/function.array-unique.php#57202.

  • 如果我没有弄错的话,它会覆盖整个子阵列而不是单个值 (3认同)