Was ist effizienter, um alle Werte in einem Array zu löschen? Beim ersten würde ich diese Funktion jedes Mal in der Schleife des zweiten Beispiels verwenden müssen.
foreach ($array as $i => $value) {
unset($array[$i]);
}
Oder dieses
foreach($blah_blah as $blah) {
$foo = array();
//do something
$foo = null;
}
unset($array)
?Antworten:
Wie Zack in den Kommentaren unten sagte, können Sie es einfach mit neu instanziieren
Wenn Sie etwas Stärkeres verwenden möchten, verwenden Sie unset, da dadurch auch $ foo aus der Symboltabelle gelöscht wird. Wenn Sie das Array später benötigen, instanziieren Sie es einfach erneut.
quelle
$foo = array();
?global $foo; unset($foo);
oderunset($GLOBALS['foo']);
unset
wird$foo
aus der Symboltabelle gelöscht. Ich spreche von sehr großen Tabellen, die ich wahrscheinlich empfehlen würde,$foo = null; unset($foo);
da dies auch den Speicher etwas besser löschen würde. Dieses Verhalten (GC) ist jedoch nicht sehr konstant und kann sich gegenüber PHP-Versionen ändern.$foo = array();
: Tatsächlich könnte ein konzeptionelles Problem darin liegen: Das erneute Instanziieren einer Struktur ist nicht dasselbe wie das Leeren. Wenn Sie sich mit Speicher beschäftigen, wissen Sie, dass dies nicht dasselbe ist, da die Zuordnung langsam ist. Trotz der Benutzerfreundlichkeit ist eine erneute Instanziierung möglicherweise nicht die Antwort auf diese Frage, insbesondere wenn dies häufig und schnell erledigt werden muss. Es könnte funktionieren, aber das würde stark von der PHP-Speicherverwaltung IMO abhängen.Wenn Sie eine Variable nur auf ein leeres Array zurücksetzen möchten, können Sie sie einfach neu initialisieren:
Beachten Sie, dass hierdurch alle Verweise darauf beibehalten werden:
Wenn Sie Verweise darauf aufheben möchten, deaktivieren Sie diese zuerst:
quelle
unset
verwendet werden sollte. +1Leider kann ich die anderen Fragen nicht beantworten, habe nicht genug Ruf, aber ich muss auf etwas hinweisen, das für mich SEHR wichtig war, und ich denke, es wird auch anderen Menschen helfen.
Das Deaktivieren der Variablen ist eine gute Möglichkeit, es sei denn, Sie benötigen die Referenz des ursprünglichen Arrays!
Um klar zu machen, was ich meine: Wenn Sie eine Funktion haben, die die Referenz des Arrays verwendet, zum Beispiel eine Sortierfunktion wie
es funktioniert nicht! Seien Sie hier vorsichtig,
unset
löschen Sie die Referenz, damit die Variable$array
erneut erstellt und korrekt gefüllt wird, aber auf die Werte von außerhalb der Funktion nicht zugegriffen werden kann.Also , wenn Sie Referenzen haben, müssen Sie verwenden
$array = array()
stattunset
, auch wenn es weniger sauber und verständlich ist.quelle
Ich würde das erste sagen, wenn das Array assoziativ ist. Wenn nicht, verwenden Sie eine
for
Schleife:Obwohl wenn möglich mit
Das Zurücksetzen des Arrays auf ein leeres Array ist vorzuziehen.
quelle
Ist das nicht
unset()
gut genugquelle
Wie wäre es
$array_name = array();
?quelle
Verwenden Sie
array_splice
diese Option, um ein Array zu leeren und die Referenz beizubehalten:array_splice($myArray, 0);
quelle
Ich habe unset () verwendet, um das Array zu löschen, aber ich habe festgestellt, dass unset () das Array null macht, daher muss das Array wie zum Beispiel neu deklariert werden
quelle
Ich sehe, dass diese Fragen sehr alt sind, aber für dieses Problem habe ich eine rekursive Funktion geschrieben, um alle Werte in einem Array zu deaktivieren. Rekursiv, da es möglich ist, dass Werte aus dem angegebenen Array auch ein Array sind. Das funktioniert also bei mir:
Damit bekomme ich das Array mit allen Schlüsseln und Sub-Arrays, aber leeren Werten.
quelle
Vielleicht einfach, wirtschaftlich (weniger Zeichen zu benutzen) ...
Wir können im PHP-Handbuch lesen:
quelle
Die nicht gesetzte Funktion ist nützlich, wenn der Garbage Collector seine Runden macht, während er keine Mittagspause hat.
Wenn die nicht gesetzte Funktion jedoch einfach die Variablenreferenz auf die Daten zerstört, sind die Daten immer noch im Speicher vorhanden, und PHP sieht den Speicher als verwendet an, obwohl kein Zeiger mehr darauf vorhanden ist.
Lösung: Weisen Sie
null
Ihren Variablen zu, um die Daten zu löschen, zumindest bis der Garbage Collector sie erfasst.und dann auf ähnliche Weise deaktivieren!
quelle
null
eine sofortige Speicherbereinigung erzwungen wird. Haben Sie eine Referenz dafür?NULL
den Wert ersetzt, der$var
in diesem Beispiel am Speicherort der Variablen gespeichert ist ?$var
, um auf ein globalesNULL
Objekt zu verweisen und die$var
Daten in Ruhe zu lassen, bis der Müll gesammelt ist. Warum sollte der Dolmetscher gezwungen sein, diese Daten sofort zu überschreiben?Dies ist leistungsstark und wurde nicht gesetzt getestet ($ gradearray); // setze das Array zurück
quelle