Ahhh, ya entiendo lo que quieres hacer, el problema es que cada vez que se recorre el array con el foreach va a buscar una sola linea a la vez. Me refiero 00003 es una linea y 00002 es otra linea. Estas se estan trabajando individualmente. Por lo tanto cada vez que llamas $v["id"] va a buscar la linea que esta corriendo en el momento si es 00003 o si es 00002. Para poder llamarlo como tu quieres, ya no se puede usar el foreach, en tu caso se tiene que hacer de esta forma debes hacerlo algo asi
Código PHP:
Ver original<?php
foreach($carro as $v){
$a[] = $v["id"];
$a[] = $v["cantidad"];
$a[] = "'{$v["precio"]}'";
}
$query2="INSERT INTO detallefac(IDDETFAC,IDFAC,CODPDTO1,CANTPDTO1,PRECPDTO1,CODPDTO2,CANTPDTO2,PRECPDTO2) VALUES ('','',$i)";
echo $query2;
Aunque sería mejor hacerlo ya directamente cuando lo creas, pero esto hace lo que estas pidiendo.