2016-07-20 12 views
0

Angenommen, ich muss Elemente aus einem Array hinzufügen und entfernen, in denen sie eindeutig sein müssen.PHP Verwenden von Array-Keys zum Speichern von Daten

Class A { 
    protected $elements = []; 

    function add($element) { 
     if (!in_array($element, $this->elements)) { 
      $this->elements[] = $element; 
     } 
    } 

    function remove($element) { 
     if (($key = array_search($element, $this->elements)) !== false) { 
      unset($this->elements[$key]); 
     } 
    } 
} 

Das sieht gut aus, aber wenn $elements viele Elemente darin hat, wird PHP müssen genannt jedes Mal add() oder remove() ist iterieren. Stattdessen kann ich dies tun:

Class A { 
    protected $elements = []; 

    function add($element) { 
     $this->elements[$element] = true; 
    } 

    function remove($element) { 
     unset($this->elements[$element]); 
    } 
} 

Welche sollte mit der gleichen Geschwindigkeit durchzuführen, unabhängig von der Anzahl der Elemente, aber ich kann über dies und das ist der Sinn dieser Frage völlig falsch sein.

Ich habe dies überall in meinen Codes gemacht, aber es nervt mich, dass ich eine Menge nutzloser Informationen (in diesem Beispiel einige true booleans) speichern, die absolut keinen Zweck haben, aber nicht ohne sie gehen können. Dies erscheint als eine Art Makel und macht mir klar, dass diese Methode nicht komplett kugelsicher ist, wie ich vielleicht denken kann.

Ist diese Art der Speicherung von Informationen in Arrays besser als die, was ich denke, die richtige Art und Weise, erstes Beispiel und gibt es irgendwelche Nachteile, außer Speicherung unnötiger Informationen?

Antwort

1

Ihre zweite Lösung wird deutlich schneller als die erste sein.

Die Nachteile sind, dass es deutlich mehr Speicher benötigt und dass Sie nur ganze Zahlen und Strings wie diese speichern können.

Wenn Sie eine ziemlich große Anzahl von Elementen hinzufügen/entfernen, dann gehen Sie mit der zweiten Lösung.

Wenn Sie Hunderttausende oder sogar Millionen von Elementen erwarten - dann kann die zweite Lösung mit einer Ausnahme wegen Speichermangel gehen - also sollten Sie die erste verwenden.

+0

Warum sollte die zweite Lösung mehr Speicher belegen? Liegt es an den Schlüsseln? –

+0

ja, wenn PHP-Arrays als Hash-Tabellen verwendet werden - sie nehmen mehr Speicher –

+0

Aber sequentielle Arrays sind auch Hash-Tabellen, warum würde ein solches Array weniger Platz als ein assoziatives nehmen:? –

Verwandte Themen