php - Desactive un elemento de matriz dentro de un bucle foreach
arrays reference (3)
Estás desarmando la referencia (rompiendo la referencia). Necesitarías unset basado en una clave:
foreach ($this->result[''list''] as $key => &$row) {
if ($this_row_is_boring) {
unset($this->result[''list''][$key]);
}
}
Esta pregunta ya tiene una respuesta aquí:
Estoy accediendo a una matriz por referencia dentro de un bucle foreach, pero la función unset () no parece estar funcionando:
foreach ( $this->result[''list''] as &$row ) {
if ($this_row_is_boring) {
unset($row);
}
}
print_r($this->result[''list'']); // Includes rows I thought I unset
Ideas? ¡Gracias!
Un poco de explicación a las respuestas anteriores.
Después de unset($row)
la variable $row
se desactiva. Eso no significa que se eliminen los datos de $row
; La lista también tiene un elemento que apunta a $row
.
Ayuda a pensar las variables como etiquetas. Una parte de los datos puede tener una o más etiquetas, y la unset
elimina esa etiqueta pero no toca los datos reales. Si se eliminan todas las etiquetas, los datos se eliminan automáticamente.
foreach ($this->result[''list''] as $key => &$row) {
if ($this_row_is_boring) {
unset($this->result[''list''][$key]);
}
}
unset($row);
Recuerde: si está usando un foreach
con una referencia, debe usar unset para desreferirlo para que foreach
no copie el siguiente encima de él. Más información