0

ショッピングカートプロジェクトのセッション配列内のアイテムを削除できません。次のコードは、選択したアイテムを取得して、セッションから削除する必要があります。ただし、最終結果は、何も削除されていない以前とまったく同じセッションになります。グーグルで同様の問題が発生しましたが、まだ実用的な解決策は見つかりませんでした。簡略化されたコードは次のとおりです。

<?php
session_start();
$removeditem = $_GET['item']; // this identifies the item to be removed
unset($_SESSION['stuff'][$removeditem]); // "stuff" is the existing array in the session
?>

print_rが以下に与えるものは次のとおりです(削除されたアイテムの例として「7」を使用)。

$removeditem: 
7

$_SESSION['stuff'] (before and after removal)
Array
(
    [0] => 7
    [1] => 24
    [2] => 36
)

明らかな何かが欠けていますか?

4

4 に答える 4

7

KEYが$removedItemに等しいアイテムを削除しています。あなたの例から、あなたは、removeedItemと等しいVALUEを持つ要素を削除しようとしているように見えます。この場合、foreachループを実行してキーを識別し、それを削除する必要があります。

foreach($_SESSION['stuff'] as $k => $v) {
  if($v == $removeditem)
    unset($_SESSION['stuff'][$k]);
}
于 2010-08-23T06:38:56.733 に答える
3

key最初に要素のを取得し、次にそれを取得する必要がありますunset。使用する必要のあるコードは次のとおりです。

if(($key = array_search($removeditem, $_SESSION['stuff'])) !== FALSE)
     unset($_SESSION['stuff'][$key]);
于 2010-08-23T06:43:15.423 に答える
0

最も簡単な方法は次のとおりです。

<?php

    session_start();
    $removeditem = $_GET['item'];

    $temp = array_flip($_SESSION['stuff']);

    unset($_SESSION['stuff'][$temp[removeditem]]);

?>

PSテストされていません...単なる概念です。

于 2010-08-23T06:53:54.043 に答える
0

7は配列内の値であり、キーではないため、キー7で何かを設定解除しても機能しません。あなたがしなければならないことは、配列内の各アイテムを削除したいアイテム($ _GET ['item'])と比較し、そのキーを取得して設定を解除することです。

于 2010-08-23T06:58:49.323 に答える