【问题标题】:Remove duplicate value in multidimensional array [duplicate]删除多维数组中的重复值[重复]
【发布时间】:2012-02-23 08:05:00
【问题描述】:

全部 我想从这个数组中删除重复的值

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尝试了这个解决方案

$result2 = array_map("unserialize", 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 次...

【问题讨论】:

  • @silly 你看不到“Tag 1”两次吗,请先理解问题。
  • 请发布您期望的结果
  • Ajay,即数组数组。主数组中的数组彼此唯一,即使它们拥有一些共同的值。
  • @AndreiG,在我发布的那个链接中,我有同样的情况。那么还有什么方法可以解决呢?
  • Ajay,请在问题中发布您期望的确切结果(标记为代码),以便我们看到您想要实现的目标

标签: php arrays multidimensional-array


【解决方案1】:
$result2 = array_unique(call_user_func_array('array_merge',$result2)); 

【讨论】:

  • 谢谢!它对我有用,但从逻辑上讲,我不清楚它是如何工作的。顺便说一句,谢谢
  • 内部(即 call_user_func_array('array_merge', $result2))将子数组合并为一个平面数组。外部 array_unique() 调用删除重复值。这对于二维数组来说是一个很好的解决方案,但不适用于 n 维数组。您最初提到的问题。所以我不太确定这是否真的解决了您的问题,或者您的问题的标题是否错误。
【解决方案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);

【讨论】:

    【解决方案3】:

    我觉得你应该试试这个

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

    【讨论】:

    • 请通过提供 3v4l.org 链接来证明此答案符合要求。 array_merge() 在我看来完全不对。