IMO that's far worse to look at. You're much better off either combining the arrays and using the key/value options of the foreach to represent them OR sticking with the for loop since there are two arrays.
Foreach is honestly the worst of the lot. The only way to kill an iteration is with a break, and it is designed to work with only one array. For and [do/]while loops are much more controllable.
You'll also need to escape this data prior to going into the query. As it sits, its open to injection. My suggestion would be to use the mysqli with prepared statements instead:
$sQry = 'UPDATE cart_table SET quantity=? WHERE product_id = ?';
if ($stmt = $con->prepare($sQry))
$stmt->bind_param('ii', $quant, $prod);
$aCombined = array_combine($_REQUEST['updt_pid'], $_REQUEST['quantity']);
foreach ($aCombined AS $prod => $quant) // that above is how you should combine to use the foreach. Can be done with your original.
Which you should consider since the mysql library is now officially deprecated.