Effizienz der Verwendung von foreach-Schleifen zum Löschen der Werte eines PHP-Arrays
Lesezeit: 3 Minuten
el_pup_le
Was ist effizienter zum Löschen aller Werte in einem Array? Das erste würde erfordern, dass ich diese Funktion jedes Mal in der Schleife des zweiten Beispiels verwende.
foreach ($array as $i => $value) {
unset($array[$i]);
}
Ich möchte nicht verwenden unset() denn das löscht die Variable.
Ja, aber warum sollten Sie ein so festgelegtes Null-Array auswerten wollen?
– Blake
21. April 2012 um 18:50 Uhr
Quelle? Keine Variable im Speicher scheint nicht kleiner zu sein als var ist null.
– Blake
21. April 2012 um 18:53 Uhr
Eric Herlitz
Wie Zack in den Kommentaren unten sagte, können Sie es einfach mit neu instanziieren
$foo = array(); // $foo is still here
Wenn Sie etwas mächtigeres wollen, verwenden Sie unset, da es auch $foo aus der Symboltabelle löscht, wenn Sie das Array später brauchen, instanziieren Sie es einfach erneut.
unset($foo); // $foo is gone
$foo = array(); // $foo is here again
Wenn wir über sehr große Tische sprechen, würde ich wahrscheinlich empfehlen
$foo = null;
unset($foo);
da das auch den Speicher etwas besser löschen würde. Dieses Verhalten (GC) ist jedoch nicht sehr konstant und kann sich je nach PHP-Version ändern. Denken Sie daran, dass das erneute Instanziieren einer Struktur nicht dasselbe ist wie das Leeren.
wenn es sich um ein globales Array handelt
– Nisham Mahsin
3. April 2014 um 14:26 Uhr
@NishamMahsin Entweder verwenden global $foo; unset($foo); oder unset($GLOBALS['foo']);
– Eric Herlitz
3. April 2014 um 15:29 Uhr
unset() ist manchmal sehr schlecht und kann Probleme verursachen, wenn Sie es falsch verwenden. Es beantwortet die OPs nicht richtig. Ich weiß nicht, warum er dies als beste Antwort akzeptiert hat. Sein Kommentar zu seiner eigenen Frage besagt, dass das Problem mit unset darin besteht, dass die Variable gelöscht wird. Um zu sehen, welche Probleme diese Lösung verursacht, werfen Sie einen Blick auf meine Antwort hier.
– Wolfsblvt
10. Dezember 2014 um 14:28 Uhr
mpen
Wenn Sie eine Variable nur auf ein leeres Array zurücksetzen möchten, können Sie sie einfach neu initialisieren:
$foo = array();
Beachten Sie, dass dadurch alle Verweise darauf beibehalten werden:
Das ist mein Code: justpaste.it/1gt46. Wie kann ich mehr als eine ID in einer Variablen deklarieren? Einzelwertdeklaration ist: $productId = 19; Wie kann ich mehr als einen Wert in $productId= deklarieren?
– Juwel
8. Februar 2018 um 8:53 Uhr
@Rathinam Ich bin mir nicht sicher, was das mit dem Löschen eines Arrays zu tun hat. Bitte stellen Sie eine neue Frage auf Stackoverflow und fügen Sie Ihren Code direkt in die Frage ein.
– mp
8. Februar 2018 um 17:07 Uhr
Wolfsblvt
Das Zurücksetzen der Variable ist ein netter Weg, es sei denn, Sie benötigen die Referenz des ursprünglichen Arrays!
Um zu verdeutlichen, was ich meine: Wenn Sie eine Funktion haben, die die Referenz des Arrays verwendet, zum Beispiel eine Sortierfunktion wie
function special_sort_my_array(&$array)
{
$temporary_list = create_assoziative_special_list_out_of_array($array);
sort_my_list($temporary_list);
unset($array);
foreach($temporary_list as $k => $v)
{
$array[$k] = $v;
}
}
es funktioniert nicht! Seien Sie hier vorsichtig, unset löscht die Referenz, also die Variable $array wird neu erstellt und korrekt gefüllt, aber die Werte sind von außerhalb der Funktion nicht zugänglich.
Wenn Sie also Referenzen haben, müssen Sie verwenden $array = array() Anstatt von unsetauch wenn es weniger sauber und verständlich ist.
Ich würde das erste sagen, wenn das Array assoziativ ist. Wenn nicht, verwenden Sie a for Schleife:
Ja, aber warum sollten Sie ein so festgelegtes Null-Array auswerten wollen?
– Blake
21. April 2012 um 18:50 Uhr
Quelle? Keine Variable im Speicher scheint nicht kleiner zu sein als var ist null.
– Blake
21. April 2012 um 18:53 Uhr