recorrer - La mejor manera de borrar los valores de una matriz de PHP
recorrer array asociativo php (10)
¿Cuál es más eficiente para borrar todos los valores en una matriz? El primero me requeriría usar 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;
}
¿Qué tal $array_name = array();
?
Al igual que Zack dijo en los comentarios a continuación, puedes volver a crear una instancia usando
$foo = array(); // $foo is still here
Si quieres algo más poderoso, usa el comando desarmado, ya que también borrará $ foo de la tabla de símbolos, si necesitas la matriz más adelante simplemente crea una instancia de nuevo.
unset($foo); // $foo is gone
$foo = array(); // $foo is here again
Esto es unset potente y probado ($ gradearray); // restablece la matriz
He utilizado unset () para borrar la matriz, pero me he dado cuenta de que unset () hará que la matriz sea nula, por lo que es necesario volver a declarar la matriz como, por ejemplo,
<?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();
// Haz lo que quieras aquí
?>
La función de unset es útil cuando el recolector de basura hace sus rondas sin tener un descanso para almorzar;
sin embargo, la función no configurada 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 a ella.
Solución: asigne un null
a sus variables para borrar los datos, al menos hasta que el recolector de basura lo tenga.
$var = null;
¡y luego desarmarlo de manera similar!
unset($var);
No está unset()
lo suficientemente bueno?
unset($array);
Si solo desea restablecer una variable a una matriz vacía, simplemente puede reiniciarla:
$foo = array();
Tenga en cuenta que esto mantendrá cualquier referencia al mismo:
$foo = array(1,2,3);
$bar = &$foo;
// ...
$foo = array(); // clear array
var_dump($bar); // array(0) { } -- bar was cleared too!
Si quiere omitir cualquier referencia al mismo, primero desactívelo.
$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
Tristemente no puedo responder a 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.
Desarreglar la variable es una buena manera, a menos que necesites 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
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;
}
}
¡no está trabajando! Tenga cuidado aquí, unset
elimina la referencia, por lo que la variable $array
se crea nuevamente y se completa correctamente, pero los valores no son accesibles desde fuera de la función.
Entonces, si tiene referencias, necesita usar $array = array()
lugar de unset
, incluso si es menos limpio y comprensible.
Use array_splice
para vaciar una matriz y retener la referencia:
array_splice($myArray, 0);
Yo diría que el primero, si la matriz es asociativa. Si no, usa un ciclo for
:
for ($i = 0; $i < count($array); $i++) { unset($array[$i]); }
Aunque si es posible, usando
$array = array();
Para restablecer la matriz a una matriz vacía es preferible.