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 数据中发送 sizequantity?否则,就是你的问题了。 是的,我愿意。代码中也有这个: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填充多维关联数组 - 最简单的方法的主要内容,如果未能解决你的问题,请参考以下文章

PHP 数组中的每个ID键关联一个值,可不可以关联两个值?

php多维数组自定义排序 uasort()

php多维数组自定义排序 uasort()

多维关联数组交集php

在 PHP 中将多维关联数组展平为一维引用数组

在 C# 中处理关联数组的最简单方法是啥?