Tach!
foreach ($fields as &$field){/* ... */}
unset($field);
Der Eintrag ist aber leider nicht gelöscht.
Damit löschst du nur die Referenz, nicht den eigentlichen Wert, auf den $field zeigt. Zum Löschen brauchst du den richtigen Eintrag im Array. Du kannst dafür die Variante
foreach ($array as $key => $value)
nehmen und dann
unset($array[$key]);
dedlfix.