Ma le righe del tuo cvs hanno lunghezza fissa di 4096 caratteri?
Io credo che invece di fopen/fread dovresti usare file() che ritorna il tuo file in un array separando le righe ai LF.


$arr[3] contiene un array? Dovrebbe!
Ma come lo usi tu viene letto come una singola stringa o singolo valore, che chiaramente in un foreach non hanno molto senso.

Temo dovresti ripartire dalla analisi del formato che hanno i dati nel tuo file e poi riscrivere il tuo codice.