Es que me esta costando entender que tienes y que necesitas.. pero pasa lo siguiente.. tu dices que el valor del precio se repite para todas.. pero se repite porque se estan sobreescribiendo los valores del arreglo.. puedes hacer una prueba haciendo lo siguiente..
Reemplaza esto
Código PHP:
$carro[md5($id[$clave])]=array (...)
por esto
Código PHP:
$carro[]=array (...)