2011-08-29 7 views
2

다음 배열에 중복을 제거하고 싶습니다. 첫 번째 값으로 그룹화 한 다음 색인을 다시 작성하겠습니다.PHP 고유/그룹 연관 배열

Array 
(
    [0] => Array 
     (
      [title] => California 
      [state_id] => 1 
     ) 

    [1] => Array 
     (
      [title] => California 
      [state_id] => 1 
     ) 

    [2] => Array 
     (
      [title] => New Mexico 
      [state_id] => 2 
     ) 

    [3] => Array 
     (
      [title] => Washington 
      [state_id] => 3 
     ) 

    [4] => Array 
     (
      [title] => Montana 
      [state_id] => 4 
     ) 

    [5] => Array 
     (
      [title] => Montana 
      [state_id] => 4 
     ) 
) 

Array 
(
    [0] => Array 
     (
      [title] => California 
      [state_id] => 1 
     ) 

[2] => Array 
    (
     [title] => New Mexico 
     [state_id] => 2 
    ) 

[3] => Array 
    (
     [title] => Washington 
     [state_id] => 3 
    ) 

[4] => Array 
    (
     [title] => Montana 
     [state_id] => 4 
    ) 

) 

으로 그리고 다시 키

Array 
(
    [0] => Array 
     (
      [title] => California 
      [state_id] => 1 
     ) 

    [1] => Array 
     (
      [title] => New Mexico 
      [state_id] => 2 
     ) 

    [2] => Array 
     (
      [title] => Washington 
      [state_id] => 3 
     ) 

    [3] => Array 
     (
      [title] => Montana 
      [state_id] => 4 
     ) 

) 
+2

'array_unique' : http://php.net/manual/en/function.array-unique.php –

+0

@bat 예 그럴 것입니다. – arnaud576875

+0

@Joseph 이전의 의견을 다시 받아야합니다. '(string) $ elem1 === (string) $ elem2 인 경우에만 두 요소가 동일하게 간주됩니다. 단어의 경우 : 문자열 표현이 같은 경우. * 모든 * 배열은'array_unique '와 같습니다. – deceze

답변

6
$array = array_values(array_combine(array_map(function ($i) { return $i['title']; }, $array), $array)); 

즉,

  • 의 압축을 title 키 (array_map)
  • 새로운 배열에 대한 키와 추출 된 제목을 사용하고 배열 (키를 고유 할 필요) 드 - 중복 예전 (array_combine)와 결합

    $keys = array_map(function ($i) { return $i['title']; }, $array); 
    $deduped = array_combine($keys, $array); 
    $result = array_values($deduped); 
    
    :

세분화 키를 삭제 array_values을 통해 결과를 실행 PHP를 들어

5.2-이 같은 익명의 콜백 함수를 작성해야 :

array_map(create_function('$i', 'return $i["title"];'), $array) 
+1

니스! '$ i [ 'title'];'(''echo $ i [ 'title'];')가 아니 었습니까? ;) – arnaud576875

+0

Ind 에드 나는 그랬다. – deceze

+0

array_unique()는 다차원 배열에서 작동하지 않습니다. 두 번째 솔루션에서이 오류가 발생합니다. 구문 분석 오류 : 예기치 않은 T_FUNCTION (예상치 못한 ')'이 – madphp

1
  1. 정렬 제목별로 배열 (에 usort 트릭을 수행)
  2. 새로운 빈 배열을 만듭니다
  3. 주기 원의 배열과 새 빈 배열
  4. 의 경우에서 볼 수있는 값을 저장 다음 배열 값은 지난 건너과 일치 한 것이

마지막에는 원하는 배열이 있습니다. 제목

  • 주기 원래 배열
  • 하여 배열이 배열 값이 키를 재 구축하는 PHP 정렬 기능을 다시 배열 지난 후 해제는
  • 정렬 동일한 경우

    1. 정렬 :
      다른 방법이있다