Intereting Posts

Отменить элемент массива внутри цикла foreach

Я обращаюсь к массиву по ссылке внутри цикла foreach, но функция unset (), похоже, не работает:

foreach ( $this->result['list'] as &$row ) { if ($this_row_is_boring) { unset($row); } } print_r($this->result['list']); // Includes rows I thought I unset 

Идеи? Благодаря!

Solutions Collecting From Web of "Отменить элемент массива внутри цикла foreach"

Вы не устанавливаете ссылку (нарушая ссылку). Вам нужно будет отключиться на основе ключа:

 foreach ($this->result['list'] as $key => &$row) { if ($this_row_is_boring) { unset($this->result['list'][$key]); } } с foreach ($this->result['list'] as $key => &$row) { if ($this_row_is_boring) { unset($this->result['list'][$key]); } } 
 foreach ($this->result['list'] as $key => &$row) { if ($this_row_is_boring) { unset($this->result['list'][$key]); } } unset($row); с foreach ($this->result['list'] as $key => &$row) { if ($this_row_is_boring) { unset($this->result['list'][$key]); } } unset($row); 

Помните: если вы используете foreach со ссылкой, вы должны использовать unset для разыменования, чтобы foreach не копировал следующую над ним. Больше информации

Немного объяснения ответов выше.

После unset($row) переменная $row не установлена. Это не означает, что данные в $row удаляются; в списке также есть элемент, указывающий на $row .

Это помогает думать о переменных как меток. Часть данных может содержать одну или несколько ярлыков, а unset удаляет эту метку, но не касается фактических данных. Если все метки удалены, данные автоматически удаляются.