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