カート画面の実装(重複した商品の合算)
これまでの実装で一通り動作するようになりましたが、まだ改善すべき箇所が残っています。同じ商品を2回、カートに追加してみてください。次のように、複数行に分かれてカートに追加されるはずです。
一般的に、同一商品をカートに追加した場合は数量を合算し同一行で表示することが多いため、今回のECサイトでも合算する処理を入れましょう。サンプルソースのSTEP3フォルダを開き、cart.phpをC:\xampp\htdocs\ec\フォルダ以下に上書き保存してください。同一商品をカートに追加すると、数量が合算されることを確認しましょう。
今回追加したのは、次の2カ所です。
$is_already_exists = 0;
for( $i = 0 ; $i < count( $_SESSION["cart"] ); $i++ )
{
if( $_SESSION["cart"][$i]["item_code"] == $_REQUEST["code"] )
{
// 追加する商品がカートに既に存在するならば、数量を合算。
$_SESSION["cart"][$i]["num"] = $_SESSION["cart"][$i]["num"] + $_REQUEST["num"];
$is_already_exists = 1;
}
}
if( $is_already_exists == 0 )
21行目には、次の変数が登場しています。
$is_already_exists = 0;
カート内に既に同一商品が存在すればこの変数は1になり、逆に存在しなければこの変数は0のままです。22行目以降のfor文でカート内の全商品をチェックし、これから追加しようとしている商品の商品コードがカート内に存在すれば、カート内の商品の数量を合算し、$is_already_existsを1に書き換えています。24行目のif文に入らなければ$is_already_existsは0のままですから、32行目のif文に入り、新たな商品がカートに追加されます。
まとめ
今回は、カート画面を実装しました。プログラムがかなり複雑になってきましたが、今回の難易度のプログラムがどうにか読み書きできるようになれば、実際のサイト制作でも十分生かせるスキルが身につくはずです。理解を容易にするために、PHPファイルそのものを紙に印刷してみるのも1つの方法です。印刷した紙を見て、if文やforループで囲まれた部分を、ペンで囲ってみましょう。プログラム全体の流れが分かりやすくなるはずです。
それでは、今回の技術要素のまとめです。
<input type="hidden"…と書かれたタグは一般的にhiddenタグと呼ばれるもので、目に見えないテキストボックスのようなもの。入力フォームとして送信できる。isset命令はある変数が存在するかどうかを判定するために用いる。unset命令は変数を破棄する。配列の番号が歯抜けになることに注意する。array_push命令は、配列に要素を追加する。forループとcount命令を組み合わせることで、forループで配列をループすることもできる。
次回はいよいよ、商品注文機能を実装します。プログラムをより読みやすくするテクニックも紹介する予定です。


