私はこの特定のセッション変数、$_SESSION['cart_'.$itemid]
を持っているとしましょう。セッション変数を特定の可変インデックスで設定解除することはできますか?
セッション変数をすべてソートし、インデックス'cart_'.$itemid
で一度だけ見つけて設定を解除することはできますか?
私はこの特定のセッション変数、$_SESSION['cart_'.$itemid]
を持っているとしましょう。セッション変数を特定の可変インデックスで設定解除することはできますか?
セッション変数をすべてソートし、インデックス'cart_'.$itemid
で一度だけ見つけて設定を解除することはできますか?
$matches = preg_grep('/^cart_/', array_keys($_SESSION));
foreach ($matches as $match) {
unset($_SESSION[$match]);
}
あなたは同じことarray_keys()
を使用して
foreach ($_SESSION as $key=>$val) {
// Look for "cart_" at the front of the array key
if (strpos($key, "cart_") === 0) {
unset($_SESSION[$key]);
}
}
など何かができる:
foreach (array_keys($_SESSION) as $key) {
// Look for "cart_" at the front of the array key
if (strpos($key, "cart_") === 0) {
unset($_SESSION[$key]);
}
}
補遺
私もデザインの提案を行うことができる場合は、これを変更する機能を持っている場合構造体ではなく、これらのカートアイテムを配列として格納することをお勧めします。配列は、内部に含まれる項目IDを値として保持します。
foreach ($_SESSION['cart'] as $item=>$quantity) {
// process the cart
}
項目が1つしかないで格納される$ SESSION [ 'カート':
// Updated after comments....
$_SESSION['cart'] = array();
// Add to cart like this:
$_SESSION['cart'][$itemId] = $new_quantity;
これは、簡単のようなものを行うにはなるだろう。 $ itemId]の内容を変更しない限り、$ itemId]とにかく
、必ずその設定を解除することができます
if (isset($_SESSION['cart_' . $itemId])) { // don't need this if you are iterating through $_SESSION
unset($_SESSION['cart_' . $itemId]);
}
$ itemidは実際には変数です。申し訳ありません、私はそれを投稿するのを忘れました。私は、 'cart_'で始まるインデックスを持つすべてのセッション変数を削除することを目指しています。 $ itemidには任意の英数字を使用できます。 – JohnSmith
このスクリプトは魔法と似ています。それは完全に動作します!あなたのスクリプトが何をしているか尋ねてもいいですかstrpos($ key、 "cart_")=== 0または$ getcartname =(explode( '_'、$ key))の使用とどのように違うのですか? if($ getcartname [0] == 'カート'); – JohnSmith
preg_grepは、配列の各メンバ(この場合は$ _SESSIONのキー)に正規表現を適用し、一致する要素を新しい配列に返します。だから、 '$ matches'はあなたのセッションで' cart_XXX'のキー名をすべて含んでいます。次に、それらのセッション変数のそれぞれを設定解除する単純なループ。 –