Effizienz der Verwendung von foreach-Schleifen zum Löschen der Werte eines PHP-Arrays

Lesezeit: 3 Minuten

Benutzeravatar von el_pup_le
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]);
}

Oder dieses

foreach($blah_blah as $blah) {
    $foo = array();
    //do something
    $foo = null;
}

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

Benutzeravatar von Eric Herlitz
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


Benutzeravatar von mpen
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:

$foo = array(1,2,3);
$bar = &$foo;
// ...
$foo = array(); // clear array
var_dump($bar); // array(0) { } -- bar was cleared too!

Wenn Sie alle Verweise darauf aufheben möchten, deaktivieren Sie es zuerst:

$foo = array(1,2,3);
$bar = &$foo;
// ...
unset($foo); // break references
$foo = array(); // re-initialize to empty array
var_dump($bar); // array(3) { 1, 2, 3 } -- $bar is unchanged

  • 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

Benutzeravatar von Wolfsblvt
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:

for ($i = 0; $i < count($array); $i++) { unset($array[$i]); }

Obwohl, wenn möglich, mit

$array = array();

Es ist vorzuziehen, das Array auf ein leeres Array zurückzusetzen.

Ist nicht unset() gut genug?

unset($array);

Benutzeravatar von Bibhas Debnath
Bibhas Debnath

Wie wäre es mit $array_name = array(); ?

Benutzeravatar von p1100i
p1100i

Verwenden array_splice um ein Array zu leeren und die Referenz beizubehalten:

array_splice($myArray, 0);

1434280cookie-checkEffizienz der Verwendung von foreach-Schleifen zum Löschen der Werte eines PHP-Arrays

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy