セッション変数内の配列にPOSTで送られたデータが既に存在する場合に配列の特定の要素の値を変更する方法
失礼します。
PHPでセッションを利用したショッピングカートのシステムを作っているのです。
現在、カート内に商品の重複をさせない処理まではできているのですが、カート内に同じIDの商品が存在する時には既にカート内に入っている商品の個数を追加する変更処理を行えるようにしたいです。
例)カート内 :ID1 りんご 個数1
↓
ユーザの行動:追加でりんごを2つカートに入れる
↓
カート内 :ID1 りんご 個数3
このような状態になるように処理をしたいです。
伝わっているでしょうか。
コードは以下の通りです。
//セッション変数「cart」が未設定の場合は空の配列に初期化
if(!isset($_SESSION['cart'])){
$_SESSION['cart'] = array();
}else if (is_string($_SESSION['cart'])){
//セッション変数「cart」に文字列が存在していれば配列セッションcartを代入
$_SESSION['cart'] = array($_SESSION['cart']);
}
/********************追加処理**********************/
$key = isset($_SESSION['cart'][$_POST['id']]);
//セッション変数内にPOSTで送られてきたidと同じものが無かった場合の処理
if(!$key){
if(isset($_POST['price'])){
$price = $_POST['price'];
if(isset($_POST['num'])){
$num = $_POST['num'];
$sum = $price * $num;
}
}
//item_resultからpostでid,name,priceが送られてきたかを確認
if(isset($_POST['id'])){
if(isset($_POST['name'])){
if(isset($_POST['price'])){
if(isset($_POST['num'])){
if(isset($sum)){
//送られてきたデータを配列に格納
$item = array('id' => $_POST['id'],
'name' => $_POST['name'],
'price' => $_POST['price'],
'num' => $_POST['num'],
'sum' => $sum);
}}}}
}else{
$msg = 'no item'; //何もカートに入れてませんよー
}
}
//セッション変数「cart」に配列の中身を追加
if(isset($item)){
$_SESSION['cart'][$_POST['id']] = $item;
}
//表示するためにセッションの中身を配列に入れなおす
$print_cart = $_SESSION['cart'];
foreachで$print_cartを回しながら、POSTで送られたIDと配列内のIDが一致した場合にarray_spliceで置換したらどうかと考えたのですが書き方が分からず断念してしまいました。
やりたい事は、カート内に同じIDの処理が存在する時には既にカート内に入っている商品の個数を追加する変更処理です。
どうしたらよいのでしょうか?
よろしくお願いします。