我遇到了一个有点恼人的问题。这是我的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中解析和循环?
抱歉,我有这么多问题。任何帮助都非常感谢。
答案 0 :(得分: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会自动创建一个空数组(如果它尚不存在),然后将产品数据添加为下一个元素。
答案 1 :(得分:0)
这是因为这一行:
$_SESSION['cart_items'] = array("items" = > $product_data);
您基本上在该行中说'items'键具有产品数据,而不是键入项目。它应该是:
$_SESSION['cart_items']['items'] = array($product_data);
键 - 将始终发生,除非您希望数据覆盖另一个。如果你不想要键(0,1等),那么唯一的另一个选择是合并数据。在这种情况下,它将是:
$ _ SESSION [ 'cart_items'] [ '项'] + = $ product_data;
..但我认为这不是你想要的。
答案 2 :(得分:0)
您不需要items
,请尝试以下方式。
if (empty($_SESSION['cart_items'])) {
$_SESSION['cart_items'] = array($product_data);
} else {
$_SESSION['cart_items'][] = $product_data;
}