セッション変数内の特定のものを削除することは可能でしょうか?


PHPでsubmitを押すとhiddenの値をセッションで保存し表示する
ショッピングカートのようなものを作っているのですが

たとえば商品ID1、2、3とありましたら
ID2とその商品名だけを削除したいのですが
どうしたらよいのでしょうか?

unsetを使えば特定の変数内を削除できるのはわかるのですが
変数内の特定の値の削除の仕方がわかりません

簡単なものでかまいませんのでサンプルをお願いしたいです。

よろしくお願いします

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2011/10/19 17:30:23
  • 終了:2011/10/20 03:05:46

ベストアンサー

id:tdoi No.1

tdoi回答回数174ベストアンサー獲得回数752011/10/19 17:42:06

ポイント100pt

カート全体がセッションの1つのキーに集約されてるなら、書き換えるしかないかと。

例えばですが、IDが2のものを消すサンプルとしてはこんな感じ。

仮定:

カートは、cartという名前でセッションに格納され、以下のような構造。

$_SESSION['cart'] = array(1 => array('name' => '商品1'),
                          2 => array('name' => '商品2'),
                          3 => array('name' => '商品3'));

その上でこんな感じ。

$cart = $_SESSION['cart'];
unset($cart[2]);
$_SESSION['cart'] = $cart;

意図はあってますよね?

何かの参考になれば。

id:robopit

なんとなく仕組みはわかりました。

arrayの部分は変数を入れもよいのでしょうか?

$product_id => array('product_name' => '')

みたいな感じで(ためしてみたらうまくいきませんでしたがそのような方法はありますでしょうか?)

2011/10/19 18:18:24
  • id:tdoi
    arrayを追加していく際に、

    $cart[$product_id] = array('product_name' => 'xxx');

    見たいにしていくことは出来ますし、

    unset($cart[$product_id]);

    のように消すことも出来ます。
    なんとなくですが、意思が統一できていない気がするので、セッションにどのようにカート情報を格納してあるか教えてもらえますか?
  • id:robopit
    遅くなってもうしわけありません

    echo"<form method='post' action='".$_SERVER['PHP_SELF']."' >";
    echo "<input type='submit' name='submit' value='登録' />
    <input type='hidden' name='product_id' value='". $row['product_id'] ."'>
    <input type='hidden' name='product_name' value='". $row['product_name'] ."'>
    </form><br>"


    という感じでセッションにいれるためのデータを用意しています。

    そして、issetするときに



    $product_id = $_POST['product_id'];
    $product_name = $_POST['product_name'];

    $_SESSION['submit'][$product_id]['product_id'] = $product_id;
    $_SESSION['submit'][$product_id]['product_name'] = $product_name;



    という感じでセッションにデータを格納させてます。
  • id:tdoi
    そんな感じでしたら、削除したい商品コードが$product_idに入っているとして、

    $cart = $_SESSION['submit'];
    unset($cart[$product_id]);
    $_SESSION['submit'] = $cart;

    で動きませんか?

    unset($_SESSION['submit'][$product_id]);

    で十分かもですね。
  • id:robopit
    できました!

    コメント1の時点でできなかったのは
    スペルミスがあったので、動かなかったみたいです
    失礼しました。

    ありがとうございました!

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません