Hola @migbriones,
sí, lo que estás haciendo es muy complicado y puede simplificarse un poco.
Primero, la estructura que usás no es un array asociativo, sino una matriz de arrays asociativos, con lo que recorrerla y manejarla es complejo.
Primero, en $params["updateQuantities"], tenés esta matriz que contiene dentro vectores asociativos, 1 vector por cada elemento. podrías simplificar muchísimo esto haciendo que ese elemento sea simplemente un vector asociativo, aprovechando que los ID de los productos no se repiten, digamos que sería:
$params["updateQuantities"] = array("id1" => cantidad1, "id2" => cantidad2, "id3" => cantidad3);
es decir, las claves son los ID y los valores las cantidades.
Con esto te ahorrás el primer bucle interior porque ya no hace falta que "detectes" cuales son las claves y cuales los valores.
Luego, podés hacer algo similar con $_SESSION["shoppingCarPartner"] en el que en vez de un $i arbitrario, podés usar el ID del producto (lo que implica dejar de usar un FOR y pasar a usar un FOREACH para recorrerlo).
De esta manera tu código de actualización quedaría algo como:
$array = $params["updateQuantities"];
$shopping = $_SESSION["shoppingCarPartner"];
foreach($array as $id => $cantidad) {
if( isset( $shopping[$id]) ) {
$_SESSION["shoppingCartPartner"][$id]["quantity"] = $cantidad;
}
}
Nótese que si bien el índice de $_SESSION["shoppingCartPartner"] es el ID del producto, el contenido mantiene la misma estructura que tenés actualmente.
Saludos cordiales!