从嵌套数组中删除重复值

时间:2013-07-12 15:52:53

标签: php arrays multidimensional-array

我正在获取堆栈删除重复的密钥并将它们分配给新的数组。

我的阵列:

  array     (
            [1] => Array
                (
                    [name] => name1
                    [actions] => add
                )

            [2] => Array
                (
                    [name] => name1
                    [actions] => remove
                )

            [3] => Array
                (
                    [name] => name2
                    [actions] => dosomething1
                )
            [4] => Array
                (
                    [name] => name2
                    [actions] => dosomething1
                )

        )

我想要实现的目标:

 array    (
                [1] => Array
                    (
                        [name] => name1
                        [actions] => add
                        [actions] => remove
                    )         
                [2] => Array
                    (
                        [name] => name2
                        [actions] => dosomething1
                        [actions] => dosomething1
                    ) 

            )

我尝试了什么:

    public function array_unique_multidimensional($input)
{
    $serialized = array_map('serialize', $input);
    $unique = array_unique($serialized);
    return array_intersect_key($input, $unique);
}

错误地返回相同的数组。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

你不能有两个带有保存值的数组键(因此不可能有给定元素的两个动作元素)你可以做的是拥有一个包含多个值的动作元素。

  $results = array();
  foreach ($array as $v){
      if (!isset($results[$v["name"]]){
           $results[$v["name"]] = array("name"=>$v["name"], "actions"=>array($v["actions"]));
      } else {
          $results[$v["name"]]["actions"][] = $v["actions"];
      }
  }

如果你想删除顶级数组上的字符串键,那么你可以这样做。

 $results = array_values($results);