Это хороший вопрос, почему ваш unset ломает вашу память.Но вы называете $this->xml_records_chunk
как переменную в вашем коде.Поэтому я хотел бы предложить, чтобы у вас был массив со всеми существующими элементами, чтобы вы уже выделили всю память.
Я думаю, что в этом случае вам не нужно очищать массив и память, потому что вы уже выделили эту память.GC не так уж и плох.Так что если ваш скрипт больше не использует переменную, он очищается.
В вашем случае я бы предложил изменить структуру массива и поместить в итератор первую запись вашего значения примерно так:
$this->xml_records_chunk[$chunks_count]['phones']
Тогда у вас будет следующая структура
$this->xml_records_chunk[$chunks_count] = [
'phones',
'...',
'...
]
Затем вы можете очистить с помощью одного сброса весь массив с помощью
unset($this->xml_records_chunk[$chunks_count])
, что может вызвать меньше проблем, и, возможно, вы можете проверить Iterator-Интерфейс для итерации и удаления ваших данных.