php arrays reference foreach unset

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