Los datos en la matriz se sobrescriben porque está reasignando el valor de $key
cada vez que se encuentra.
Lo que quieres hacer es crear una matriz secundaria como $key
valor e inserte los nodos en esa matriz de esta manera, obtendrá el resultado esperado.
[
'NM1' => ['...', '...'],
'PR1' => ['...', '...']
]
El código sería,
while (($row = fgetcsv($handle, 1000, ";", "\"", "\n")) !== FALSE) {
$key = array_shift($row);
// Notice the extra []
$data[$key][] = $row;
}
Cada clave ahora contendrá una matriz con un nodo para cada fila encontrada.