2012-06-08 2 views
0

Я пытаюсь использовать переменные сеанса на веб-сайте электронной коммерции. Идея состоит в том, чтобы начать сеанс, если он еще не запущен. Если сеанс уже существует, то я хочу проверить, существует ли новый элемент, который был добавлен, в массиве сеансов. Если это так, то я бы просто увеличил количество, если не добавить его к текущему массиву сеансов.Добавление многомерных массивов в PHP

Проблема в том, что добавление не работает. Я получаю первый и второй массивы, но вместо того, чтобы добавлять третий, второй массив продолжает переписываться в любое время, когда нажата кнопка добавления в корзину. Вот мой код

<?php 

       if(isset($_SESSION['cart'])){ 
        $newItems = ''; 
        $cart = $_SESSION['cart']; 
        foreach($cart as $item => $value){ 
//$size, $colour, $quantity and $price are the current $_GET values 
         if($prodId == $value['prodId'] && $value['colour'] == $colour && $value['size'] == $size && $value['price'] == $price){ 
          $value['qty']+= $quantity; 
          }else{ 
           $newItems = array('prodId'=>$prodId,'price'=>$price,'qty'=>$quantity,'colour'=>$colour,'size'=>$size); 
           $cart []= $newItems; 
           } 
         } 
        }else{ 
         $_SESSION['cart'] []= array('prodId'=>$prodId,'price'=>$price,'qty'=>$quantity,'colour'=>$colour,'size'=>$size); 
         } 

?> 

На самом деле не знает, где это пошло не так, я такую ​​гнилую удачу с многомерными массивами. Любая помощь будет оценена по достоинству.

+0

Добро пожаловать в переполнение стека! Пожалуйста, правильно отформатируйте свой код. Кодовый блок вставлен путем отступов 4 пробела перед любой строкой кода. На этот раз я отформатировал код для вас, но в следующий раз отформатируйте его правильно. Дополнительную помощь можно найти в разделе [Редактирование FAQ] (http://stackoverflow.com/editing-help#code) –

ответ

1

Вы назначили $_SESSION['cart'] переменной, а затем обработали ее. Это только копия, а не ссылка на исходную переменную. Если вы хотите получить доступ к $_SESSION снова и манипулировать ею, вы можете достичь этого таким образом:

$cart = $_SESSION['cart']; 
foreach($cart as $item => $value){ 
    if($prodId == $value['prodId'] && $value['colour'] == $colour && $value['size'] == $size && $value['price'] == $price){ 
     $_SESSION['cart'][$item]['qty']+= $quantity; 
    }else{ 
     // ... 

--- или ---

Вы просто назначить $cart к $_SESSION['cart'] снова после манипуляций $cart.

+0

Наверх ответ ... большое спасибо. – goonerify

+0

Я также удалил $ cart [] = $ newItems из цикла foreach .... просто заставляя этот код когда-либо повторно использовать – goonerify

Смежные вопросы