【问题标题】:PHP fill up multidimensional associative array - easiest wayPHP填充多维关联数组 - 最简单的方法
【发布时间】:2015-07-26 20:34:26
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您是否在 URL 中传递了 id,并且总是在 POST 数据中发送 sizequantity?否则,就是你的问题了。
  • 是的,我愿意。代码中也有这个:if(isset($_POST['size'])){...

标签: php arrays


【解决方案1】:

您的问题是您只是假设这些项目设置在$_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() 以添加选定的尺寸。我只是向您展示如何创建初始结构数组。

【讨论】:

  • 我不是假设它们已经设置好了。他们不是。我只是想知道最简单的方法。类似于我上面写的代码。也许像对象而不是数组。顺便说一句,如果没有设置id,你的定义会是什么样子?会不会太复杂了?
  • @koubin 太简单了!好吧,如果没有设置产品(id),你基本上不会在会话中存储它,因为你需要它来识别产品?
  • 我没有得到最后的评论,但我想,在代码可以解决问题之前,类似的东西:if (!isset($_SESSION['cart'])){$_SESSION['cart'] = array();} 我说的对吗?
  • 完全正确@koubin。我对最后一条评论的意思是,如果用户不想将产品添加到购物车会话中,您就不会将其添加到购物车会话中。
  • 好的。谢谢。我希望有一些简单而美观的解决方案,但可能没有像我想的那样。
【解决方案2】:

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

如果你想用一个对象来解决这个问题,我会使用以下变体:

$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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-20
    • 2017-05-29
    • 2011-11-04
    • 2019-10-28
    • 1970-01-01
    • 2011-06-14
    • 2017-01-25
    • 2013-09-10
    相关资源
    最近更新 更多