Если у вас есть некоторый контроль над структурой массива, хранящегося в $ _SESSION для вашей корзины, я бы рекомендовал использовать что-то вроде этого.
/*Entry point
It is assumed at this point you have the value product id ($pid) and initiated
your $_SEESION[<basket array index>] set - "basket" in this example
*/
(isset($_SESSION['basket'][$pid]))? $_SESSSION['basket'][$pid]++ : $_SESSION['basket'][$pid] = 1;
Этот подход не требует итеративного сравнениякаждый элемент в корзине, чтобы определить, был ли его экземпляр уже добавлен в корзину.Это позволит простой
foreach($_SESSION['basket'] as $product_id => $noOfProduct){
/*Do your checkout thing here*/
}
обработать корзину, как только вы закончите добавление в нее.
Код, размещенный в комментариях Алекса, примера проблемы нетрешение
for ($x=0;$x<count( $_SESSION["sess_id"]);$x++){
$x_id= $_SESSION["sess_id"][$x]; //[$x] appended, presumed missing
$x_id_prd= $_SESSION["sess_id_prd"];
$x_name_prd= $_SESSION["sess_name"];
$x_size_prd= $_SESSION["sess_size"];
$x_color_prd= $_SESSION["sess_color"];
$x_clr_code_prd= $_SESSION["sess_clr_code"];
$x_num_prd= $_SESSION["sess_num"];
if($x_id_prd[$x]==$id_prd
&& $x_size_prd[$x]==$size_prd
&& $x_color_prd[$x]==$color_prd
&& $x_clr_code_prd[$x]==$clr_code ){
//do something to get $_SESSION["sess_num"]+1;
}
}
Код комментария в конце