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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Дублирование элемента массива

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
EVGENphp
Отправлено: 07 Февраля, 2015 - 06:23:57
Post Id


Новичок


Покинул форум
Сообщений всего: 13
Дата рег-ции: Дек. 2014  


Помог: 0 раз(а)




Здравствуйте, друзья!

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

Я добавляю в корзину товар по 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 товара
 
 Top
Ch_chov
Отправлено: 07 Февраля, 2015 - 06:43:45
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




EVGENphp пишет:
Причем нужно чтобы его ключ был таким же - так как товар один и тот же

В массиве не могут быть элементы с одинаковыми ключами.
 
 Top
Sail
Отправлено: 07 Февраля, 2015 - 09:26:54
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




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. )
 
 Top
armancho7777777 Супермодератор
Отправлено: 07 Февраля, 2015 - 15:55:03
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




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;
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« HTTP и PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB