2011-02-02 12 views
3

일부 중복 항목이있는 결합 배열이 있습니다. 예를 들어, 내가 가진 :연관 배열과 고유 한 배열 - 중복 제거

<? 
$group_array = array('user_id'=>array(), 'user_first'=>array()); 

어느 아래와 같이 뭔가를 출력합니다

Array 
(
[user_id] => Array 
    (
     [0] => 594 
     [1] => 597 
     [2] => 594 
    ) 

[user_first] => Array 
    (
     [0] => John 
     [1] => James 
     [2] => John 
    ) 
) 

난 단지 사용자가 요한이 한 번 표시됩니다 있도록이 전체 배열을 소독하고 싶습니다 (USER_ID 기준) .

나는 다음 시도했다 :

<?php 
    $unique = array_unique($group_array); 
    print_r($unique); 

을하지만 일을 나타나지 않습니다. 배열에서 중복 된 항목을 제거 할 수있는 다른 방법은 없습니까?

도움이 될 것입니다. 사물의

답변

3

다른 접근법은 고유 한 user_id을 찾고, 중요한 것은 ar ray 키를 누른 다음 각 열의 해당 값만 유지하십시오.

$group_array = array(
    'user_id' => array(594, 597,  594, 598 ), 
    'user_first' => array('John', 'James', 'John', 'John'), 
); 

// Find unique user_ids 
$uniques = array_unique($group_array['user_id']); 

// Keep only the uniques 
foreach ($group_array as $column => $collection) { 
    $group_array[$column] = array_intersect_key($collection, $uniques); 
} 

print_r($group_array); 
1

커플 :

array_unique 기능은 하위 배열로 재귀하지 않습니다

설명서 읽기 : http://php.net/manual/en/function.array-unique.php "두 요소가있는 경우 동일하다고 만 볼수있는 때는 (string) $ elem1 ===됩니다 (문자열) $ elem2. 단어 : 문자열 표현이 같은 경우 첫 번째 요소가 사용됩니다. " 귀하의 경우 $의 elem1에서

및 $ elem2은 모두 배열 인

0

이 스크립트는 USER_ID에 중복을 제거하고 자신의 식별자가 다른 경우 여러 firstnames을 유지 :

$group_array = Array(
    'user_id' => Array(
     594, 
     597, 
     594, 
     598, 
    ), 
    'user_first' => Array(
     'John', 
     'James', 
     'John', 
     'John', 
    ) 
); 

$dup = array(); 
for ($i=0; $i<count($group_array['user_id']); $i++) { 
    if (in_array($group_array['user_id'][$i], $dup)) { 
     unset($group_array['user_id'][$i]); 
     unset($group_array['user_first'][$i]); 
    } else { 
     $dup[] = $group_array['user_id'][$i]; 
    } 
} 
print_r($group_array); 

출력 :

Array 
(
    [user_id] => Array 
     (
      [0] => 594 
      [1] => 597 
      [3] => 598 
     ) 

    [user_first] => Array 
     (
      [0] => John 
      [1] => James 
      [3] => John 
     ) 

) 
0

가능한 용액 array_combine(...)의 필터링 부작용을 사용하는 것이다 : 그래서 우리는 단순히 키를 추출 할 수있는 원래의 구조를 복원하는 어레이

Array 
(
    [594] => John 
    [597] => James 
) 

있어

$array = [ 
    'user_id' => [ 
     0 => 594, 
     1 => 597, 
     2 => 594 
    ], 
    'user_first' => [ 
     0 => 'John', 
     1 => 'James', 
     2 => 'John' 
    ] 
]; 

$combinedArray = array_combine($array['user_id'], $array['user_first']); 

및 값 :

$array = [ 
    'user_id' => array_keys($combinedArray), 
    'user_first' => array_values($combinedArray), 
]; 

결과 :

Array 
(
    [user_id] => Array 
     (
      [0] => 594 
      [1] => 597 
     ) 

    [user_first] => Array 
     (
      [0] => John 
      [1] => James 
     ) 
)