- ベストアンサー
カートの中身ページの作成方法
- PHPを使ったショップサイトでカートの中身ページを作成する方法について困っています。
- 参考にした記事の方法を試してみましたがうまくいかず困っています。
- 商品が1つの場合と複数の場合で表示が異なるため、解決策を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 こんな感じで出来ると思いますが違っていたらすみません。 行数分のrowspanが設定できればいいので処理中のカウントを取るだけで実装できると思います。 <?php session_start(); $_SESSION['cart'] = array(); $_SESSION['cart'][] = array ( '商品1', 2, 4000 ); $_SESSION['cart'][] = array ( '商品2', 2, 1000 ); $_SESSION['cart'][] = array ( '商品3', 2, 500 ); $_SESSION['cart'][] = array ( '商品4', 1, 200 ); $_SESSION['cart'][] = array ( '商品3', 2, 500 ); $_SESSION['cart'][] = array ( '商品4', 1, 200 ); $_SESSION['cart'][] = array ( '商品3', 2, 500 ); $_SESSION['cart'][] = array ( '商品4', 1, 200 ); $_SESSION['cart'][] = array ( '商品3', 2, 500 ); $_SESSION['cart'][] = array ( '商品4', 1, 200 ); ?> <table border="1"> <tr> <th>商品</th> <th>個数</th> <th>値段</th> <th>合計</th> </tr> <?php $count = 0; if ( isset ( $_SESSION["cart"] ) ) { foreach ( $_SESSION["cart"] as $cart ) { ?> <tr> <td><?= $cart[0] ?></td> <td><?= $cart[1] ?></td> <td><?= $cart[2] ?></td> <?php // カウントが0の時=最初の行を生成する時に // カートの中身の数で結合する if ( $count === 0 ) { ?> <td rowspan="<?= count($_SESSION['cart']) ?>">ここに合計</td> <?php } ?> </tr> <?php $count ++; } } ?> </table>
その他の回答 (1)
- shimix
- ベストアンサー率54% (865/1590)
複数行あるかどうかはノーチェック(1行だけならrowspan="1"で問題ない)でいいですから、『1行目のときだけ、合計金額欄のtd要素(rowspan属性あり)を挿入する』というだけですよね? カートの内容を$_SESSIONにどう保持しているかわかりませんが、$_SESSION['cart']が明細の配列になっているとしたら、 $count = count($_SESSION['cart']); // 行数を取得 $idx = 0; // 処理している行 foreach ($_SESSION['cart'] as $cart) { if ($idx === 0) { // table要素のヘッダ出力 } $idx++; // 処理行をセット print '<tr>'; print '<td>' . $cart['hinmei'] . '</td>'; print '<td>' . $cart['price'] . '</td>'; if ($idx == 1) { // 1行目なら合計欄を出力 print '<td rowspan="' . $count . '">' . $total . "</td>"; } print "</tr>"; } if ($idx >= 1) { // table要素のフッタ出力 } といった感じでしょうか。 #下記のソースでテストしています。$arrayの内容を変えて試してください。 <?php $array = array('cart'=>array()); $array['cart'][] = array('hinmei'=>'shohin_a', 'price'=>1500); $array['cart'][] = array('hinmei'=>'shohin_b', 'price'=>2500); $count = count($array['cart']); $total = 0; foreach ($array['cart'] as $cart) { $total = $total + $cart['price']; } $idx = 0; foreach ($array['cart'] as $cart) { if ($idx === 0) { print '<table border="1">'; print '<tr><th>SHOHIN</th><th>PRICE</th><th>TOTAL</th></tr>'; } $idx++; print '<tr>'; print '<td>' . $cart['hinmei'] . '</td>'; print '<td>' . $cart['price'] . '</td>'; if ($idx == 1) { print '<td rowspan="' . $count . '">' . $total . "</td>"; } print "</tr>"; } if ($idx >= 1) { print '</table>'; }
お礼
ご回答有難うございます! shimix様のソースでも試したところうまく作動しました! ベストアンサーは悩みましたが、回答して頂いた時間と既存のソースに近いことからANo.1様の回答を選びました。 お時間を割いていただいたのに申し訳ございません。 ソース自体は「こういう書き方もあるのだな」と勉強になりました! 回答ありがとうございました!
お礼
こんなにもお早い回答有難うございます! LancerVII様のソースで行なったところ無事理想の形が実現できました! ソースもスッキリしましたしとても勉強になりました! ありがとうございました!