Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Дублирование элемента массива
Форумы портала PHP.SU » » HTTP и PHP » Дублирование элемента массива

Страниц (1): [1]
 

1. EVGENphp - 07 Февраля, 2015 - 06:23:57 - перейти к сообщению
Здравствуйте, друзья!

Подскажите, как мне реализовать такую задачу:

Я добавляю в корзину товар по id. Когда добавляю следующий, проверяю есть ли такой id в корзине: если есть - увеличиваю количество на 1, если нет - просто добавляю новый. Здесь все хорошо - работает.

Проблемы начинаются когда у меня параметр размера товара - size_id. Я также начинаю делать проверку: если есть товар с таким id - проверяю такого он размера или нет. Если такого - увеличиваю количество на 1, а вот если размер другой, мне нужно дублировать элемент (он я является массивом). Причем нужно чтобы его ключ был таким же - так как товар один и тот же.

Как мне это сделать? Подскажите, пожалуйста)

Вот функция добавления товара:

PHP:
скопировать код в буфер обмена
  1. // Добавление товара в корзину
  2. function add2basket($prod_id, $prod_size, $qty = 1){    
  3.     if(isset($_SESSION['basket'][$prod_id])){ // если добавляемый товар есть
  4.         if($_SESSION['basket'][$prod_id]['size_id'] = $prod_size){ // если есть такого размера
  5.             $_SESSION['basket'][$prod_id]['qty'] += $qty;
  6.         }else{ // если не такого размера
  7.             /* КАК написать функцию дублирования массива $_SESSION['basket'][$prod_id] с перезаписью элемента size_id? */
  8.         }
  9.     }else{ // если добавляемого товара нет
  10.         $_SESSION['basket'][$prod_id]['size_id'] = $prod_size;
  11.         $_SESSION['basket'][$prod_id]['qty'] = $qty;
  12.     }
  13.     return $_SESSION['basket'];
  14. }


Вот массив на выходе:

CODE (htmlphp):
скопировать код в буфер обмена
  1. (
  2.     [basket] => Array
  3.         (
  4.             [1] => Array
  5.                 (
  6.                     [size_id] => 2
  7.                     [qty] => 2
  8.                     [cat_name] => Платок
  9.                     [brand_name] => Fofo
  10.                     [name] => Alpina 120
  11.                     [price] => 352
  12.                     [img] => tovar_4.jpg
  13.                 )
  14.  
  15.         )
  16.  
  17.     [total_sum] => 0
  18.     [total_qty] => 0
  19. )


Элемент [1] => Array - это id товара
2. Ch_chov - 07 Февраля, 2015 - 06:43:45 - перейти к сообщению
EVGENphp пишет:
Причем нужно чтобы его ключ был таким же - так как товар один и тот же

В массиве не могут быть элементы с одинаковыми ключами.
3. Sail - 07 Февраля, 2015 - 09:26:54 - перейти к сообщению
EVGENphp, но элементом для ключа может быть ещё и многомерный массив.
Например:
PHP:
скопировать код в буфер обмена
  1. $arr = array(1 =>
  2.   array(
  3.       array('size' => 11, 'otherparam1' => 22, 'someotherparam' => 33 /* , ... */)
  4.     , array('size' => 12, 'otherparam1' => 44, 'someotherparam' => 55 /* , ... */)
  5.     , array('size' => 13, 'otherparam1' => 77, 'someotherparam' => 'somevalue' /* , ... */)
  6.   ),
  7. 2 =>
  8.   array(
  9.       array('size' => 11, 'otherparam1' => 22, 'someotherparam' => 33 /* , ... */)
  10.     , array('size' => 12, 'otherparam1' => 44, 'someotherparam' => 55 /* , ... */)
  11.   )
  12. )
4. armancho7777777 - 07 Февраля, 2015 - 15:55:03 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. function add2basket($prod_id, $prod_size, $qty = 1)
  2. {
  3.     if(!isset($_SESSION['basket'][$prod_id][$prod_size])) {
  4.         $_SESSION['basket'][$prod_id][$prod_size] = $qty;
  5.     } else {
  6.         $_SESSION['basket'][$prod_id][$prod_size] += $qty;
  7.     }
  8.  
  9.     return $_SESSION['basket'];
  10. }

(Добавление)
PHP:
скопировать код в буфер обмена
  1. $output = '<ol>';
  2.  
  3. foreach($_SESSION['basket'] as $prod_id => $qtyList)
  4. {
  5.     $output .= "<li>Product #{$prod_id}:<ul>";
  6.    
  7.     foreach($qtyList as $prod_size => $qty) {
  8.         $output .= "<li>Size: {$prod_size}, qty{$qty}</li>";
  9.     }
  10.  
  11.     $output .= "</ul></li>";
  12. }
  13.  
  14. $output .= '</ol>';
  15.  
  16. echo $output;

 

Powered by ExBB FM 1.0 RC1