Qu'est-ce qui est le plus efficace pour effacer toutes les valeurs d'un tableau? Le premier m'obligerait à 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;
}
unset($array)
?Réponses:
Comme Zack l'a dit dans les commentaires ci-dessous, vous pouvez simplement le ré-instancier en utilisant
Si vous voulez quelque chose de plus puissant, utilisez unset car il effacera également $ foo de la table des symboles, si vous avez besoin du tableau plus tard, instanciez-le à nouveau.
la source
$foo = array();
?global $foo; unset($foo);
soitunset($GLOBALS['foo']);
unset
effacera$foo
de la table des symboles. Je parle de très grandes tables que je recommanderais probablement$foo = null; unset($foo);
car cela effacerait un peu mieux la mémoire. Ce comportement (GC) n'est cependant pas très constant et peut changer au fil des versions PHP.$foo = array();
: en fait, il pourrait y avoir un problème conceptuel: ré-instancier une structure n'est pas la même chose que la vider. Lorsque vous traitez avec la mémoire, vous savez que ce n'est pas la même chose que l'allocation est lente. Ainsi, malgré la facilité d'utilisation, la ré-instanciation pourrait ne pas être la réponse à cette question, surtout si l'on a besoin de le faire beaucoup de fois et rapidement. Cela pourrait fonctionner, mais cela dépendrait fortement de la gestion de la mémoire PHP, IMO.Si vous souhaitez simplement réinitialiser une variable dans un tableau vide, vous pouvez simplement le réinitialiser:
Notez que cela conservera toutes les références à celui-ci:
Si vous souhaitez casser des références à celui-ci, désactivez-le d'abord:
la source
unset
doit être utilisé. +1Malheureusement, 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 d'autres personnes aussi.
Désactiver la variable est un bon moyen, 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
ça ne marche pas! Attention ici,
unset
supprime la référence, donc la variable$array
est créée à nouveau et remplie correctement, mais les valeurs ne sont pas accessibles depuis l'extérieur de la fonction.Donc, si vous avez des références, vous devez utiliser à la
$array = array()
place deunset
, même si c'est moins clair et compréhensible.la source
Je dirais le premier, si le tableau est associatif. Sinon, utilisez une
for
boucle:Bien que si possible, en utilisant
Il est préférable de réinitialiser le tableau à un tableau vide.
la source
N'est-ce pas
unset()
assez bon?la source
Et pourquoi pas
$array_name = array();
?la source
Utilisez
array_splice
pour vider un tableau et conserver la référence:array_splice($myArray, 0);
la source
J'ai utilisé unset () pour effacer le tableau mais je me suis rendu compte que unset () rendra le tableau nul, d'où la nécessité de re-déclarer le tableau comme par exemple
la source
Je vois que cette question est vraiment ancienne, mais pour ce problème, j'ai écrit une fonction récursive pour annuler toutes les valeurs d'un tableau. Récursif car il est possible que les valeurs du tableau donné soient également un tableau. Alors ça marche pour moi:
Donc, avec cela, j'obtiens le tableau avec toutes les clés et sous-tableaux, mais des valeurs vides.
la source
Peut-être moyen simple, économique (moins de signes à utiliser) ...
On peut lire dans le manuel php:
la source
La fonction unset est utile lorsque le ramasse-miettes fait ses rondes sans avoir de pause déjeuner;
Cependant, la fonction non définie détruit simplement la référence de variable aux données, les données existent toujours en mémoire et PHP considère la mémoire comme étant en cours d'utilisation même si elle n'a plus de pointeur vers elle.
Solution: assignez
null
à vos variables pour effacer les données, au moins jusqu'à ce que le ramasse-miettes les récupère.puis désactivez-le de la même manière!
la source
null
forcera une collecte immédiate des déchets. Avez-vous une référence pour cela?NULL
remplacera la valeur stockée à l'emplacement de la$var
variable dans cet exemple?$var
pour pointer vers unNULL
objet global et laisser$var
les données de là seules jusqu'à ce qu'elles soient récupérées. Pourquoi l'interpréteur serait-il obligé d'écraser ces données immédiatement?Ceci est puissant et testé unset ($ gradearray); // réinitialise le tableau
la source