2012-02-23 61 views
0

所有 删除重复值,我想从这个数组删除重复值在多维数组

Array 
(
    [0] => Array 
     (
      [0] => Ajay Patel 
      [1] => Tag 1 
     ) 

    [1] => Array 
     (
      [0] => Tag 1 
      [1] => Tag 3 
     ) 

    [2] => Array 
     (
     ) 

    [3] => Array 
     (
     ) 

    [4] => Array 
     (
     ) 

) 

我试图从How to remove duplicate values from a multi-dimensional array in PHP

$结果2 = array_map(“反序列化”,array_unique(array_map这个解决方案(“serialize”,$ result2)));

但我认为这里有什么不对,我得到这个结果。

Array 
(
    [0] => Array 
     (
      [0] => Ajay Patel 
      [1] => Tag 1 
     ) 

    [1] => Array 
     (
      [0] => Tag 1 
      [1] => Tag 3 
     ) 

    [2] => Array 
     (
     ) 

) 

我想是

Array 
      (
       [0] => Ajay Patel 
       [1] => Tag 1 
       [2] => Tag 3 
      ) 

标签1被删除,因为它的2倍......

+1

@silly你不能看到“标签1”两次,请先理解问题。 – 2012-02-23 08:08:39

+0

请发布结果 - 你期望 – silly 2012-02-23 08:10:49

+1

Ajay,这是一个数组数组。存在于主阵列中的数组彼此是唯一的,即使它们具有一些共同的值。 – 2012-02-23 08:10:54

回答

2
$result2 = array_unique(call_user_func_array('array_merge',$result2)); 
+0

谢谢!它适用于我,但逻辑上我不清楚它是如何工作的.BTW谢谢 – 2012-02-23 08:33:45

+0

内部部分(即call_user_func_array('array_merge',$ result2))将子数组合并到一个平面数组中。外部array_unique()调用删除重复的值。 这是一个很好的二维数组解决方案,但不会针对n维数组进行缩放。你的问题最初是指哪一个。所以我不太确定这是否真的解决了您的问题,或者您的问题标题是否有误。 – nem75 2012-02-23 09:07:09

2

试试这个

$result = array(); 
function merge_values(array &$array, $mixed) { 
    if(is_array($mixed)) { 
     foreach($mixed as $tags) { 
      merge_values($array, $tags); 
     } 
    } 
    else { 
     if(null !== $mixed && strlen($mixed) > 0 && false === array_search($mixed, $array)) { 
      $array[] = $mixed; 
     } 
    } 
} 

merge_values($result, $array); 
print_r($result); 
1

我想你应该尝试这

function uniqueElements($outerArray){ 
    $result=array(); 
    foreach ($outerArray as $innerArray){ 
     $result=array_merge($innerArray); 
    } 

return array_unique($result); 
} 
+0

这也适用,谢谢 – 2012-02-23 08:40:19