2011-12-01 5 views

답변

18

알고리즘 적으로 생각하면 중복을 제거하는 방법은 목록을 살펴보고 발견 한 항목을 추적하며 "발견 된"목록에있는 내용을 제거하는 것입니다. 이것을 달성하는 쉬운 방법 중 하나는 목록을 정렬하는 것입니다. 그렇게하면 중복을 효율적으로 제거 할 수 있습니다. 컴퓨터는 말할 것도없고, 당신에 대해 생각해보십시오. 이 목록 중 어느 것이 복제본을 쉽게 제거 할 수 있습니까?

apple 
banana 
cantaloupe 
apple 
durian 
apple 
banana 
cantaloupe 

또는

apple 
apple 
apple 
banana 
banana 
cantaloupe 
cantaloupe 
durian 

편집 : 그것으로 조금보고 (그리고 this article을 찾는) 후에는 두 가지 모두 작업이 완료다면, 그들은 기능적으로 동일하지 않은 것처럼 보이거나 적어도 그들은 항상 그렇지 않습니다. 이러한 점 몇 의역 :) (

  1. array_unique을 값을 정렬, 당신이 언급 한 바와 같이, 그래서 array_flip (array_flip()를) 동일 순서 배열을 반환하지 않을 -하지만이 요구 될 수 있습니다.
  2. 값이 객체이면 키 (right?)를 만들 수 없습니다. 즉, flip 메서드는 모든 배열의 상자에서 작동하지 않습니다. 값에 관계없이 정렬 메서드가 제대로 작동합니다. 유형.
+0

문서화를 살펴보면, 정렬을위한 선택적 매개 변수가 있다는 것에 동의해야합니다. 정렬을 사용하여 내부적으로 비교를 수행하는 것이 거의 불가능합니다. – Tim

+0

array_flip (array_flip())을 사용하면 정렬 할 필요없이 고유 한 값을 얻을 수 있습니다. 반드시 더 좋은 방법이 있어야할까요? – Lizard

+1

키가 중복을 가질 수 없으므로 값이 "부숴 야"합니다. 배열에 대한 할당이 일정 시간이라면 O (n)에서 연산을 남겨 둡니다. 귀하의 질문에 대답하기 위해, 왜 내장 기능이 내 머리 꼭대기에서 그렇게하지 않는지 잘 모르겠습니다. –

0

제가 생각하기에 Dan Fego은 중복을 제거하기 전에 배열을 정렬하는 이유에 대해 훌륭한 답변을주었습니다. 그러나 나는 ’ array_flip() 무엇을 검토하고 싶습니다. 내가 설명하기 위해 다음과 같은 배열을 사용하는 것이다 ’ :

'a' => 'apple' 
'b' => 'banana' 
'c' => 'apple' 
'd' => 'date' 

array_flip() 그러나

'apple' => 'a' 
'banana' => 'b' 
'apple' => 'c' 
'date' => 'd' 

을 생산 키와 값을 exhanges, 키는 고유해야합니다. manualarray_flip()이 처리하는 방법에 대해 설명 : 값이 여러 발생을 가지고

경우 최신 키의 값으로 사용되며, 나머지는 모두 손실됩니다.우리가 array_flip(array_flip())를 사용하는 경우 우리가 얻을 그래서

'banana' => 'b' 
'apple' => 'c' 
'date' => 'd' 

:

array_unique() 뒤에 동기 부여로
'b' => 'banana' 
'c' => 'apple' 
'd' => 'date' 

, 우리는 라스무스 러 도프하지 않는 추측 할 수

그래서 우리는 이런 식으로 뭔가를 얻을 수 또는 현재 PHP 개발에 종사하는 사람이 대답에 신경을 써야합니다.

관련 문제