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?
Warum sollte die zweite Lösung mehr Speicher belegen? Liegt es an den Schlüsseln? –
ja, wenn PHP-Arrays als Hash-Tabellen verwendet werden - sie nehmen mehr Speicher –
Aber sequentielle Arrays sind auch Hash-Tabellen, warum würde ein solches Array weniger Platz als ein assoziatives nehmen:? –