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;
}
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
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
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.
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.
N'est-ce pas unset()
assez bon?
unset($array);
Que diriez-vous de $array_name = array();
?
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
?>
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);
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 [].
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.