0

私は少し苛立たしい問題に遭遇しました。これが私のPHPコードです。変数がどこから来ているかを無視します。これはショッピングカート機能用ですが、さまざまな分野に適用できます。

$data_set = json_decode(stripslashes($_POST['varA']), true);
$pid = $pid['product_id'];
$quantity = $pid['quantity'];

$_SESSION['cartid'] = $_SESSION['cartid'] + 1;

$product_data = array("Product_ID" = > $pid, "quantity" = > $quantity, "cartid" = > $_SESSION['cartid']);

私の問題は、コードのこの場所で発生しています。最初に、Session変数に値が含まれているかどうかを確認します。値が含まれていない場合は、連想配列の作成に進みます。

if (empty($_SESSION['cart_items'])) {
    $_SESSION['cart_items'] = array("items" = > $product_data);
} else {
    array_push($_SESSION['cart_items']['items'], $product_data);
}


echo json_encode($_SESSION['cart_items']);

最初のアイテムが「追加」された後の最終結果は次のようになります。

{
    "items": {
        "Product_ID": "2",
        "quantity": "1",
        "cartid": 1
    }
}

ただし、最初の追加を数回行った後、すべての値がキーを取得します。

{
    "items": {
        "0": {
            "Product_ID": "2",
            "quantity": "1",
            "cartid": 2
        },
        "1": {
            "Product_ID": "2",
            "quantity": "1",
            "cartid": 3
        },
        "Product_ID": "2",
        "quantity": "1",
        "cartid": 1
    }
}

これらのキーが発生しないようにするにはどうすればよいですか?これは可能ですか?そうでない場合、キーが毎回追加されるようにこれをどのように書き直すことができますか?そして、これはフロントエンドのJSで解析してループすることは可能ですか?

質問がたくさんあります。どんな助けでも本当にありがたいです。

4

3 に答える 3

1

最初の反復では、$_SESSION['cart_items']は空なので、次のように実行します。

$_SESSION['cart_items'] = array("items" => $product_data);

これにより作成$_SESSION['cart_items']['items']されますが、製品だけを入力します。代わりに配列として定義する必要があります。

$_SESSION['cart_items'] = array("items" => array($product_data));

これにより、後で拡張できる単一のアイテムを含む配列が作成されますarray_push

そうは言っても、条件全体を次のように置き換えることができます。

$_SESSION['cart_items']['items'][] = $product_date;

PHPは、空の配列がまだ存在しない場合は自動的に作成し、次の要素として製品データを追加します。

于 2012-05-17T06:42:14.193 に答える
0

これは、次の行によるものです。

$_SESSION['cart_items'] = array("items" = > $product_data);

基本的に、その行で、「items」キーには、キー入力アイテムではなく、製品データがあると言います。そのはず:

$_SESSION['cart_items']['items'] = array($product_data);

キーは、データが別のデータを上書きする必要がない限り、常に発生します。キー(0、1など)が必要ない場合、他の唯一のオプションはデータをマージすることです。その場合、次のようになります。

$ _SESSION ['cart_items'] ['items'] + = $ product_data;

..しかし、私はそれがあなたが望むものではないと思います。

于 2012-05-17T06:36:53.963 に答える
0

は必要ありませんitems。以下の方法を試してください。

if (empty($_SESSION['cart_items'])) {
    $_SESSION['cart_items'] = array($product_data);
} else {
    $_SESSION['cart_items'][] = $product_data;
}
于 2012-05-17T06:40:02.493 に答える