2013-04-10 9 views
10

Ich bin im Zweifel, was zu verwenden:Was ist besser zu verwenden: in_array oder array_unique?

foreach(){ 
    // ..... 

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

    // .... 
} 

ODER

foreach(){ 
    // ..... 

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

    // .... 
} 

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

UPDATE

Ziel Reihe von einzigartigen Werte zu erhalten ist. Dies kann durchgeführt werden, indem jedes Mal geprüft wird, ob bereits ein Wert mit in_array vorhanden ist, oder jedes Mal alle Werte addiert werden und am Ende array_unique. Gibt es also einen großen Unterschied zwischen diesen beiden Möglichkeiten?

+0

die Dokumentation lesen, 'array_unique' entfernt doppelte Werte innerhalb eines bestimmten Array ...' in_array' eine Suche in die Array-Werte liefert und gibt ein true/false, wenn gefunden/nicht –

+2

@DarylGill fand ich weiß, was diese Funktionen tut, aber ich möchte wissen, welche der bereitgestellten Beispiele ist besser – user1692333

+0

Sie haben nicht genügend Informationen zur Verfügung gestellt, warum Sie mit diesen beiden Funktionen stecken, in welchem ​​Kontext sie verwendet werden usw. –

Antwort

7

Ich denke, der zweite Ansatz wäre effizienter. Tatsächlich sortiert array_unique das Array und scannt es dann.

Die Sortierung erfolgt in N log N Schritten, dann dauert das Scannen N Schritte.

Der erste Ansatz benötigt N^2 Schritte (jedes Element scannt alle N vorherigen Elemente). Auf großen Arrays gibt es einen sehr großen Unterschied.

+1

+1 für den zweiten Ansatz. Hier ist ein gutes Skript (Snippet) mit Vergleich in Millisekunden: https://gist.github.com/Ocramius/7453564 –

2

Ehrlich, wenn Sie einen kleinen Datensatz verwenden, ist es egal, welchen Sie verwenden. Wenn Ihr Dataset in den 10000s ist, werden Sie definitiv eine Hash-Map für diese Art von Dingen verwenden wollen.

Dies ist davon ausgegangen, dass die Ansichten eine Zeichenfolge oder etwas sind, die es aussieht wie es ist. Dies ist normalerweise O (n) und möglicherweise der schnellste Weg, um mit der Verfolgung von eindeutigen Werten umzugehen.

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