2013-07-12 2 views
0

중복 된 키를 제거하고 새 배열에 할당하고 있습니다.중첩 된 배열에서 중복 된 값을 제거하십시오.

내 배열 :

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); 
} 

내가 달성하기 위해 노력하고 무엇

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 
       ) 

     ) 

동일한 배열을 잘못 반환합니다. 어떤 도움을 주시면 감사하겠습니다.

답변

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); 
+0

매력처럼 작동합니다. – user888300

관련 문제