• 締切済み

同様の値があるか判別するには?

ショッピングカートを作っており商品情報を以下のような セッション配列で管理しています。 Array ( [set] => Array ( [0] => Array ( [key] => 商品名A [num] => 1 [price] => 1980 ) [1] => Array ( [key] => 商品名B [num] => 1 [price] => 2980 ) [2] => Array ( [key] => 商品名C [num] => 1 [price] => 3980 ) ) ) やりたいことは既に持っているセッションの['key']と商品名の 変数が同様かどうかを判別し同様の値があった場合となかった 場合で分岐しそれぞれの処理をしたいです。 分岐後の処理はなんとかなるのですがどうやって判断すれば いいものかわかりません^^; $set = 'ここに商品名がはいります'; if (!count($_SESSION['set'])) { // セッションカウントがない場合 // (1つ目の商品をカートに入れた場合) // 値設定 $n = 0; $_SESSION['set'][$n]['key'] = $set; // その他の処理 } else { // セッションカウントがある場合 // (2つ目以降の商品をカートに入れた場合) // 値設定 $n = count($_SESSION['set']); if (!array_search($set, $_SESSION['set'][$n])) { // ここで同様の値があるか判別したい } if (***) { // 同様の値がある場合の処理 } else { // 同様の値がない場合の処理 } } 宜しくお願い致します。

みんなの回答

  • SHlVA
  • ベストアンサー率48% (20/41)
回答No.2

最初からベストな作りにするのは難しいでしょうから、少しずつ改変などしていくのがイイかと思います。そういう経験をしていくと、カート以外を作る際にも、ロジックのアイデアが浮かびやすくなると思います。 やっぱり、作りまくるのが一番ですね。動くものを。 hiddenは基本的に、相手が自由に送ってくる値ですから、カートには向いていません。自分がhiddenで挿入していたモノが、そのままもどってくる保証はありません。カートはセッションが定石ですかね。 私もとりあえず作っては、入浴中に改善点が思いついたり、で上がってすぐに修正、なんてことも多いです。 新たに思いついた配列は array("商品ID"=>"個数"); のみ。あとは、カートの中身表示ページなどでDBに問い合わせる(価格と商品名)、という具合。

dcx147
質問者

お礼

度々のお返事ありがとございます。 >最初からベストな作りにするのは難しいでしょうから、少しずつ改変などしていくのがイイかと思います。 確かにそれは言えてますね。私も作っては考え変更しての日々精進ですw >新たに思いついた配列はarray("商品ID"=>"個数");のみ。 これにつきまして若干補足をして頂けますと幸いなのですが現在の私の考え方としては 商品詳細ページのurlをhoge.php?id=商品idとしており商品idからmysqlに商品名や 価格などの情報を問い合わせ変数に格納し必要な情報を表示しています。 商品の数量などを選択しをカートに入れるボタンを押し確定した段階にてpostされた 個数はもちろんmysqlに問い合わせ変数に格納した商品名や価格などもセッションに 入れた後カート内を表示するページに移動しているのですがそうではなく商品詳細ページでは array("商品ID"=>"個数"); のみのセッション配列を保持しカート内を表示するページで合計料金などの算出をし セッションに組み込んでいくという解釈でよろしいのでしょうか? そうだとすればコードもだいぶシンプルになるような気がしてきました☆

すると、全ての回答が全文表示されます。
  • SHlVA
  • ベストアンサー率48% (20/41)
回答No.1

自分ならこうする、っていうのは、 $_SESSION['cart'] = array( "商品ID"=>array("title"=>"商品名","num"=>"個数","price"=>"価格"), "12"=>array("title"=>"日本酒","num"=>"1","price"=>"1580"), "15"=>array("title"=>"ワイン","num"=>"2","price"=>"880"), ); 構造も妄想しちゃいましたが、これですでにカートに入ってるかどうかは、 $_SESSION['cart'][$商品ID] があるかどうかだけでわかるかと思います。 isset()を使いたいところですが、空文字でも、trueを返すので、empty()や、普通に ($_SESSION['cart'][$商品ID] != "") でいけるかと。 カートから削除する際にしっかりunset()すれば、isset()でいいかと。まぁ、is_array()とか、その辺はいろいろお試しください。 keyを(変更される可能性のある)商品名にするのは、恐い気がします。その辺はデータベース構造によるとは思いますけど。

dcx147
質問者

お礼

お返事ありがとうございます。 インデックスを商品idに変更しチャレンジしてみたいと思います。 カートの制作は初めてで構造段階から非常に悩んでおります。 ちなみにカートは個人の趣味で使用する予定です。 まずは、hidden管理よりはセッション管理でと思い自分なりにいろいろと 試しているのですが経験もなくこれでいいものか常に考えてしまいます^^; 例えば持っている値により送料の料金をmysqlから取得する事や合計金額の算出、 購入完了後に購入者へ買い物情報(商品名やお支払い合計料金)の確認メール配信など ポイント的には的を得れるのですが一番悩んでいる事は複数の商品をカートに入れている場合 どのようなセッション配列で管理し購入完了までもっていくべきなのかというベースとなる 構造の理想が見えず四苦八苦している状態です。 まずはベースとなる理想を見つけたいと思い参考になりそうな情報がないものかと探して みたのですが検索方法が悪いものかこれといった情報がみつからず自己流で進めている状況です。 なにかアドバイスや参考になりえる情報等ございましたら是非ご教授頂けますと幸いです。 宜しくお願い致します。

すると、全ての回答が全文表示されます。

関連するQ&A