2013-04-10 17 views
10

jestem w wątpliwości co do użycia:Co lepiej użyć: in_array lub array_unique?

foreach(){ 
    // ..... 

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

    // .... 
} 

LUB

foreach(){ 
    // ..... 

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

    // .... 
} 

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

UPDATE

Celem jest uzyskanie wachlarz unikalnych wartości. Można to zrobić, sprawdzając za każdym razem, czy wartość już istnieje z in_array lub dodać wszystkie wartości za każdym razem i na końcu użyj array_unique. Czy istnieje jakaś zasadnicza różnica między tymi dwoma sposobami?

+0

zapoznać się z dokumentacją, 'array_unique' usuwa zduplikowane wartości w danej tablicy ...' in_array' zapewnia przeszukiwanie do wartości tablicy i zwraca true/false, jeśli znaleziono/nie znaleziono –

+2

@DarylGill wiem co ta funkcja działa, ale chcę wiedzieć, który z podanych przykładów jest lepszy. – user1692333

+0

Nie podałeś wystarczających informacji, dlaczego utknąłeś z tymi dwiema funkcjami, w jakim kontekście są one używane itd. –

Odpowiedz

7

Myślę, że drugie podejście byłoby bardziej wydajne. W rzeczywistości array_unique sortuje tablicę, a następnie ją skanuje.

Sortowanie odbywa się w N log N krokach, a następnie skanowanie trwa N kroków.

Pierwsze podejście wykonuje N^2 kroków (element foreach skanuje wszystkie N poprzednich elementów). W przypadku dużych tablic istnieje ogromna różnica.

+1

+1 dla drugiego podejścia. Oto dobry skrypt (urywek) z porównaniem w milisekundach: https://gist.github.com/Ocramius/7453564 –

2

Szczerze mówiąc, jeśli używasz małego zestawu danych, nie ma znaczenia, którego z nich używasz. Jeśli twój zbiór danych znajduje się w 10000, z całą pewnością chcesz użyć mapy mieszania dla tego typu rzeczy.

Zakłada to, że widoki są ciągiem lub czymś, co wygląda tak, jak jest. Zazwyczaj jest to O (n) i prawdopodobnie najszybszy sposób radzenia sobie z unikalnymi wartościami śledzenia.

foreach($views as $view) 
{ 
    if(!array_key_exists($view,$unique_views)) 
    { 
     $unique_views[$condition][$view] = true; 
    } 
} 
Powiązane problemy