2013-04-10 3 views
10

나는 의문을 사용하는 것입니다 :사용하는 것이 더 좋은 : in_array 또는 array_unique?

foreach(){ 
    // ..... 

    if(!in_array($view, $this->_views[$condition])) 
     array_push($this->_views[$condition], $view); 

    // .... 
} 

또는

foreach(){ 
    // ..... 

    array_push($this->_views[$condition], $view); 

    // .... 
} 

$this->_views[$condition] = array_unique($this->_views[$condition]); 

UPDATE

목표는 고유 한 값의 배열을 얻을 수 있습니다. 값이 이미 in_array으로 존재하는지 항상 확인하거나 매번 모든 값을 추가하고 마지막에 array_unique을 사용하면됩니다. 이 두 가지 방법간에 큰 차이가 있습니까?

+0

문서를 읽기가'array_unique'가 in_array'가 배열 값으로 검색을 제공'... 주어진 배열에서 중복 된 값을 제거하고 반환하는 참/거짓 –

+2

내가 알고 @DarylGill 무엇 이 함수는 그렇지만 제공되는 예제 중 더 나은 것을 알고 싶습니다. – user1692333

+0

이 두 함수가 왜 사용되는 지에 대한 충분한 정보를 제공하지 못했습니다. –

답변

7

두 번째 방법이 더 효율적이라고 생각합니다. 실제로 array_unique는 배열을 정렬 한 다음 스캔합니다.

정렬은 N 로그 N 단계에서 수행되며, 검색은 N 단계를 거칩니다.

첫 번째 접근법은 N^2 단계를 필요로합니다 (foreach 요소는 이전 N 개의 요소 모두를 스캔합니다). 큰 배열에는 매우 큰 차이가 있습니다.

+1

in_array''검사 용. 다음은 밀리 초 단위로 비교되는 좋은 스크립트입니다 (https://gist.github.com/Ocramius/7453564). –

2

솔직히 작은 데이터 세트를 사용하는 경우 사용하는 데이터는 중요하지 않습니다. 데이터 집합이 10000에 있다면 가장 확실하게 이런 종류의 해시 맵을 사용하고 싶을 것입니다.

이것은보기가 문자열 인 것으로 가정합니다. 이것은 일반적으로 O (n)이며 고유 값 추적을 처리하는 가장 빠른 방법 일 수 있습니다. 발견/발견되지 않는 경우는

foreach($views as $view) 
{ 
    if(!array_key_exists($view,$unique_views)) 
    { 
     $unique_views[$condition][$view] = true; 
    } 
} 
관련 문제