PHP:访问多维会话数组

时间:2012-10-01 14:49:24

标签: php

我想通过使用多维会话数组来实现购物车,但不知道如何访问它们。例如,

  • case1:用户将一个项目添加到购物车,名称为“x”,大小为“m”。然后再次添加名称“x”和大小“m”

line1:pname“x”size“m”数量“2”

  • case2:当用户将一个项目添加到名为“x”且大小为“m”的购物车时。然后用户将另一个项目添加到名为“x”但尺寸为“s”的购物车中。

如何将其操作为2行顺序?

line1:pname“x”size“m”数量“1”
第2行:pname“x”大小“s”数量“1”

     if (!isset($_SESSION['order'])) {
         $_SESSION['order'] = array();  
     }
     $_SESSION['order'][] = array('id'=>$pID, 'size'=>$size, 'quantity'=>0);

   switch ($action) {
    case "add":
        $_SESSION['order'][]['quantity']++;
    break;

    case "remove":
        unset($_SESSION['order'][][$pID]);
    break;

    case "empty":
        unset($_SESSSION['order']);
    break;
}

2 个答案:

答案 0 :(得分:1)

每次拨打[]时,您的会话都会获得一个元素。添加$pID作为变量ID:

更改为:

if (!isset($_SESSION['order'])) {
    $_SESSION['order'] = array();  
}
$_SESSION['order'][$pID.'-'.$size] = array('quantity'=>0);

switch ($action) {
    case "add":
        $_SESSION['order'][$pID.'-'.$size]['quantity']++;
        break;

    case "remove":
        unset($_SESSION['order'][$pID.'-'.$size]);
        break;

    case "empty":
        // unset($_SESSION['cart']);
        unset($_SESSSION['order']);
        break;
}

您稍后可以使用$_SESSION['order'][$pID.'-'.$size]

访问该产品

要访问它们:

foreach($_SESSION['order'] as $key => $one){
    list($pid, $size) = explode('-', $key);
}

答案 1 :(得分:0)

我建议您使用对象而不是数组。 使用数组会产生一种复杂性,使代码的可读性和复杂性降低; 我建议你使用面向对象的方法。

只需创建两个类:

    class ShoppingCart {

    private $items;

    public function getItems(){

     return $this->items;
    }

    public function addItem($item){

       $this->items[] = $item;
}


class Item {

private $name;
private $size;

public function getName() { return $this->name;}
public function getSize() { return $this->siez; }
public function setName($name) { $this->name = $name; }
public function setSize($size) { $this->size = $size; }


Now you can add items to the cart like this:

$cart = new ShoppingCart();

$item1 = new Item();
$item1->setName('x');
$item1->setSize('m');

$item2 = new Item();
$item2->setName('x');
$item2->setSize('s');

$cart->addItem($item1);
$cart->addItem($item2);

您是否看到,此代码可读且易于理解。