質問: $_SESSION['cart']; /*************************************************/ ``` カートに追加する動きに関する処理のみになります。 目的はカート内に重複したデータが存在しない事ですので、 1.POSTで送られてきたデータが既に存在している場合、カート内の商品の個数をプラス1する 2.カートに入れた後、重複したデータが存在していたら1つのみを残して個数をプラス1する この2点のどちらの方法でも問題ありません。 どちらも自分で試した結果、上手くいきませんでした。 どう記述したら良いでしょうか? よろしくお願いします。 コメントを頂きましたので、コードを修正しました。 重複チェックをしていた時のコードになります。
回答: 現状だと$_SESSION['cart']は単なる配列になっているのでin_arrayを使っても重複チェックが効きません。そこで、IDを使った連想配列(hash)にすると動くはずです。 ``` //セッション変数内にPOSTで送られてきたidと同じものが無かった場合の処理 $key = isset($_SESSION['cart'][$_POST['id']]); // ...色々処理... //セッション変数「cart」に配列の中身を追加 if(isset($item)) { $_SESSION['cart'][$_POST['id']] = $item; } ``` $_POSTや$_SESSION変数を直接使うと、コードが読みにくくなってバグを探すのが難しくなってしまいます。関数を使って、$_POSTや$_SESSION['cart']を渡して上げると読みやすくなると思います。