web-dev-qa-db-fra.com

Meilleur moyen d'effacer un PHP les valeurs du tableau

Qu'est-ce qui est plus efficace pour effacer toutes les valeurs d'un tableau? Le premier me demanderait d’utiliser cette fonction à chaque fois dans la boucle du deuxième exemple.

foreach ($array as $i => $value) {
    unset($array[$i]);
}

Ou ca

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

Comme Zack l’a dit dans les commentaires ci-dessous, vous pouvez simplement le ré-instancier en utilisant 

$foo = array(); // $foo is still here

Si vous voulez quelque chose de plus puissant, utilisez non défini car cela effacera aussi $ foo de la table des symboles, si vous avez besoin du tableau plus tard, instanciez-le à nouveau.

unset($foo); // $foo is gone
$foo = array(); // $foo is here again
213
Eric Herlitz

Si vous voulez simplement réinitialiser une variable sur un tableau vide, vous pouvez simplement le réinitialiser:

$foo = array();

Notez que cela maintiendra toutes les références à cela:

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

Si vous souhaitez rompre toute référence à ce dernier, supprimez-le d'abord:

$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
75
mpen

Malheureusement, je ne peux pas répondre aux autres questions, je n'ai pas assez de réputation, mais je dois souligner quelque chose qui était TRÈS important pour moi et je pense que cela aidera également les autres.

Désactiver la variable est une bonne manière, sauf si vous avez besoin de la référence du tableau d'origine!

Pour clarifier ce que je veux dire: Si vous avez une fonction qui utilise la référence du tableau, par exemple une fonction de tri comme

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;
    }
}

ça ne marche pas! Attention, unset supprime la référence. La variable $array est ainsi créée et remplie correctement, mais les valeurs ne sont pas accessibles de l'extérieur de la fonction.

Donc, si vous avez des références, vous devez utiliser $array = array() au lieu de unset, même si cela est moins clair et moins compréhensible.

30
Wolfsblvt

Je dirais le premier, si le tableau est associatif. Sinon, utilisez une boucle for:

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

Bien que si possible, en utilisant

$array = array();

Pour réinitialiser le tableau à un tableau vide est préférable.

12
Madara Uchiha

N'est-ce pas unset() assez bon?

unset($array);
9
John Conde

Que diriez-vous de $array_name = array();?

6
Bibhas Debnath

j'ai utilisé unset () pour effacer le tableau, mais je me suis rendu compte que unset () rendrait le tableau nul, d'où la nécessité de re-déclarer le tableau comme par exemple

<?php 
    $arr = array();
    array_Push($arr , "foo");
    unset($arr); // this will set the array to null hence you need the line below or redeclaring it.
    $arr  = array();

    // do what ever you want here
?>
1
Blessing

La fonction unset } est utile lorsque le ramasse-miettes fait sa tournée sans avoir la pause de midi;

cependant, la fonction unset détruit simplement la référence de variable aux données, celles-ci existent toujours en mémoire et PHP voit la mémoire en cours d'utilisation bien qu'elle n'ait plus de pointeur.

Solution: Affectez null à vos variables pour effacer les données, au moins jusqu'à ce que le ramasse-miettes s'en empare.

$var = null;

et ensuite désamorcé de la même manière!

unset($var);
0
Waqar Alamgir

Peut-être simple, économique (moins de signes à utiliser) ...

$array = [];

Nous pouvons lire dans le manuel php:

À partir de PHP 5.4, vous pouvez également utiliser la syntaxe de tableau abrégé, qui remplace array () par [].

0
PHP php

Je vois que ces questions sont très anciennes, mais pour ce problème, j’ai écrit une fonction récursive pour annuler la définition de toutes les valeurs d’un tableau. Récursif car il est possible que les valeurs du tableau donné soient également un tableau. Donc ça marche pour moi:

function empty_array(& $complete_array) {
    foreach($complete_array as $ckey => $cvalue)
    {
        if (!is_array($cvalue)) {
            $complete_array[$ckey] = "";
        } else {
            empty_array( $complete_array[$ckey]);
        }

    }
    return $complete_array;

}

Donc, avec cela, je reçois le tableau avec toutes les clés et sous-tableaux, mais des valeurs vides.

0
Bueck0815