繁体   English   中英

如何在购物车中的PHP中具有相同名称的会话数组变量?

[英]How to have session array variables in PHP with same name in shopping cart?

我正在使用会话变量在PHP中创建一个购物车,以便在签出之前存储用户的产品选择。 在大多数情况下,它是有效的。 问题是,如果用户选择说“小”号的“红色”衬衫,则会将其添加到会话变量中,如下所示:

    'products' =>
    array(size=1)
        'code' =>
            array(size=5)
                'product_size' => string 'Small'
                'quantity' => string '1'
                'product_code' => string 'sku'
                'name' => string 'shirt red'
                'price' => string '25'      

但是,如果用户选择大小不同的同一项目,则会用相同的代码覆盖先前的会话变量。

我如何做到这一点,以便用户可以以不同的大小获得相同的项目,而不会覆盖先前的会话变量?

我会这样建造

 ['products' => [
    $sku => [  //the actual sku value, not literally sku
        'price' => '25', //if it's common ( total = price x total_qty ), if not put a total here
         //'total_price' => 70
        'total_qty' => 3,
        'name' => string 'shirt red' //if its common
        'items' => [
             0 => [
                 'size' => 'Small'
                 'quantity' => '1'              
                 //'price' => 20
             ], 1 => [ 
                 'size' => 'Medium'
                 'quantity' => '2'              
                 //'price' => '25' 
             ]   
        ] //end items
   ]//end sku
]

基本上,嵌套一个项目时,每个项目的内容都不相同。 如果价格在尺寸上不常见,我会以注释形式列出价格。

如果这是主要区别,您也可以按大小键入项目

  .....
   'items' => [
        'Small' => [
             'quantity' => '1'              
             //'price' => 20
         ], 'Medium' => [ 
             'quantity' => '2'              
             //'price' => '25' 
         ]   
    ]

这不太“灵活”,但更容易减少重复项。 items数组键比另一个嵌套的“ size”键更易于检查。

这应该给您一个想法,实际的结构取决于您和您的用例,以允许您最轻松地访问项目的方式构建它,但仍然足够灵活以容纳您的所有产品。

最后一个例子,如果大小和数量是唯一不同的东西,那么您甚至可以消除嵌套数组。

.....
'items' => [
    'Small' => '1','Medium' => '2'  
 ]

同样,您的数组在您的问题中也有明显的错误。

   product_color' => string 'Small'

将产品ID保留为键,并在其中保留具有名称,sku和类型等属性。

[
'products' => [
    'pid123' => [
        [
            'name' => 'abc',
            'sku' => 'sku-abc',
            'types' => [
                [
                    'colour' => 'red',
                    'size' => '42',
                    'qty' => 1
                ],
                [
                    'colour' => 'red',
                    'size' => '40',
                    'qty' => 2
                ]
            ]
        ]
    ],
    'pid789' => [
        [
            'name' => 'xyz',
            'sku' => 'sku-xyz',
            'types' => [
                [
                    'colour' => 'red',
                    'size' => '42',
                    'qty' => 1
                ],
                [
                    'colour' => 'red',
                    'size' => '40',
                    'qty' => 2
                ]
            ]
        ]
    ] 
]];

类型列表将包含各种尺寸,颜色和数量信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM