PHP填充多维关联数组 - 最简单的方法

时间:2015-05-15 02:41:38

标签: php arrays

我想使用$_SESSION将商品存储在购物车中。这些项目由id定义,每个项目有3个大小,每个大小都有存储项目的数量。我想像那样使用多维关联数组

$_SESSION['cart']['id'.$_GET['id']]['size'.$_POST['size']]['quantity'] += $_POST['quantity'];

但我想我得到的问题(Notice: Undefined index)是因为没有先定义数组。

我想保持简单,那么最简单的方法是什么?

2 个答案:

答案 0 :(得分:3)

您的问题是您只是假设项目已在$_SESSION中设置。您需要假设它们不是,并从添加它们开始。

你可以利用isset()

if(!isset($_SESSION['cart']['id'.$_GET['id']])) {
    $_SESSION['cart']['id'.$_GET['id']] = array(
        'sizeONE' => array(
            'quantity' => 0
        ),
        'sizeTWO' => array(
            'quantity' => 0
        ),
        'sizeTHREE' => array(
            'quantity' => 0
        ),
    );
}

您显然修改了上述内容,可能只根据需要设置了产品ID,然后运行相同类型的isset()来添加所选尺寸。我只是向您展示如何创建初始结构数组。

答案 1 :(得分:1)

我认为存储这些数据的最佳方式不是在多维数组中,而是在一个Object中(而不是在$ _SESSION中,但这是一个完全不同的主题)。 / p>

如果你想用一个物体接近它,我会使用以下变体:

$myItem = new stdClass;
$myItem->id = $_GET['id'];
$myItem->sizeOne = new stdClass;
$myItem->sizeOne->name = "sizeOne";
$myItem->sizeOne->quantity = 1;
// repeat for sizeTwo and sizeThree

$_SESSION['cart'][$myItem->id] = $myItem;

<强>优点:

您的计划中有更多OOP approach

<强>缺点:

在$ _SESSION中存储对象可能会导致scalability issues