¿Cuál es más eficiente para borrar todos los valores en una matriz? La primera requeriría que use esa función cada vez en el ciclo del segundo ejemplo.
foreach ($array as $i => $value) {
unset($array[$i]);
}
O esto
foreach($blah_blah as $blah) {
$foo = array();
//do something
$foo = null;
}
unset($array)
?Respuestas:
Como dijo Zack en los comentarios a continuación, simplemente puede volver a crear una instancia usando
Si desea algo más poderoso, use unset, ya que también borrará $ foo de la tabla de símbolos, si necesita la matriz más adelante, simplemente ejemplifique nuevamente.
fuente
$foo = array();
?global $foo; unset($foo);
ounset($GLOBALS['foo']);
unset
se borrará$foo
de la tabla de símbolos. Estoy hablando de tablas muy grandes que probablemente recomendaría,$foo = null; unset($foo);
ya que eso también despejaría la memoria un poco mejor. Sin embargo, ese comportamiento (GC) no es muy constante y puede cambiar en las versiones de PHP.$foo = array();
: en realidad puede haber un problema conceptual en él: volver a crear una instancia de una estructura no es lo mismo que vaciarla. Cuando se trata de memoria, sabe que no es lo mismo que la asignación es lenta. Entonces, a pesar de la facilidad de uso, la reiniciación podría no ser la respuesta a esta pregunta, especialmente si uno necesita hacerlo muchas veces y rápidamente. Podría funcionar, pero eso dependería en gran medida de la gestión de memoria PHP, IMO.Si solo desea restablecer una variable a una matriz vacía, simplemente puede reiniciarla:
Tenga en cuenta que esto mantendrá cualquier referencia a él:
Si desea romper alguna referencia a él, desactívelo primero:
fuente
unset
debe usar. +1Lamentablemente, no puedo responder las otras preguntas, no tengo suficiente reputación, pero necesito señalar algo que fue MUY importante para mí, y creo que también ayudará a otras personas.
Desarmar la variable es una buena manera, ¡a menos que necesite la referencia de la matriz original!
Para aclarar lo que quiero decir: si tiene una función que utiliza la referencia de la matriz, por ejemplo, una función de clasificación como
¡no está trabajando! Tenga cuidado aquí,
unset
elimina la referencia, por lo que la variable$array
se crea nuevamente y se llena correctamente, pero los valores no son accesibles desde fuera de la función.Por lo tanto, si tiene referencias, debe usarlas en
$array = array()
lugar de hacerlounset
, incluso si es menos limpio y comprensible.fuente
Yo diría el primero, si la matriz es asociativa. Si no, usa un
for
bucle:Aunque si es posible, usando
Restablecer la matriz a una matriz vacía es preferible.
fuente
¿No es lo
unset()
suficientemente bueno?fuente
¿Qué tal
$array_name = array();
?fuente
Use
array_splice
para vaciar una matriz y retener la referencia:array_splice($myArray, 0);
fuente
He usado unset () para borrar la matriz, pero me he dado cuenta de que unset () hará que la matriz sea nula, por lo tanto, la necesidad de volver a declarar la matriz como, por ejemplo,
fuente
Veo que estas preguntas son realmente antiguas, pero para ese problema escribí una función recursiva para desarmar todos los valores en una matriz. Recursivo porque es posible que los valores de la matriz dada también sean una matriz. Entonces eso funciona para mí:
Entonces con eso obtengo la matriz con todas las claves y sub-matrices, pero con valores vacíos.
fuente
Quizás de manera simple y económica (menos signos de uso) ...
Podemos leer en el manual de php:
fuente
El unset función es útil cuando el recolector de basura realiza sus rondas mientras no tiene un descanso para almorzar;
sin embargo, la función no establecida simplemente destruye la referencia variable a los datos, los datos aún existen en la memoria y PHP ve la memoria como en uso a pesar de que ya no tiene un puntero.
Solución: Asigne
null
a sus variables para borrar los datos, al menos hasta que el recolector de basura los consiga.y luego desarmarlo de manera similar!
fuente
null
forzará una recolección de basura inmediata. Tienes una referencia para eso?NULL
reemplazará el valor almacenado en la ubicación de la$var
variable en este ejemplo?$var
para apuntar a algúnNULL
objeto global y dejará$var
solo los datos hasta que se recolecte basura. ¿Por qué el intérprete se vería obligado a sobrescribir esos datos de inmediato?Esto es poderoso y probado sin establecer ($ gradearray); // restablecer la matriz
fuente