Unset элемент массива внутри цикла 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
идеи? Спасибо!
3 ответов
вы сбрасываете ссылку (нарушая ссылку). Вам нужно будет отключить на основе ключа:
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
со ссылкой Вы должны использовать unset для разыменования, чтобы foreach
не копирует следующий поверх него. Подробнее
немного объяснение ответов выше.
после unset($row)
переменная $row
не установлено. Это не означает, что данные в $row
удаляется, в списке также есть элемент, указывающий на $row
.
это помогает думать о переменных как о метках. Часть данных может иметь одну или несколько меток, и unset
удаляет метку, но не касается фактических данных. Если все метки удалены, данные автоматически удаляются.