PHP填充多维关联数组 - 最简单的方法
Posted
技术标签:
【中文标题】PHP填充多维关联数组 - 最简单的方法【英文标题】:PHP fill up multidimensional associative array - easiest way 【发布时间】: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 数据中发送 size
和 quantity
?否则,就是你的问题了。
是的,我愿意。代码中也有这个:if(isset($_POST['size']))...
【参考方案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。
【讨论】:
以上是关于PHP填充多维关联数组 - 最简单的方法的主要内容,如果未能解决你的问题,请参考以下文章