2010-05-22 6 views
2

Я занимаюсь изготовлением корзины покупок на PHP. Чтобы проверить, выбрал ли пользователь несколько продуктов, я помещаю все в массив ($ content). Когда я его выводю, я получаю что-то вроде «14,14,14,11,10». Я хотел бы иметь что-то вроде «3 x 14, 1 x 11, 1 x 10». Какой самый простой способ сделать это? Я действительно не знаю, как это сделать.Несколько товаров в корзине PHP

Это самая важная часть моего кода.

$_SESSION["cart"] = $cart; 

    if ($cart) { 
     $items = explode(',', $cart); 
     $contents = array(); 
     $i = 0; 
     foreach ($items as $item) { 
      $contents[$item] = (isset($contents[$item])) ? $contents[$item] + 1 : 1; 
      $i++; 
     } 

     $smarty->assign("amount",$i); 


     echo '<pre>'; 
     print_r($contents); 
     echo '</pre>'; 

Заранее благодарен.

ответ

5

Почему бы не построить более надежную реализацию корзины?

Считайте, начиная с структуры данных, как это:

$cart = array(
    'lines'=>array(
    array('product_id'=>14,'qty'=>2), 
    array('product_id'=>25,'qty'=>1) 
    ) 
); 

или аналогичный.

Тогда вы можете создать набор функций, которые работают на телеги структуры:

function addToCart($cart, $product_id, $qty){ 
    foreach($cart['lines'] as $line){ 
    if ($line['product_id'] === $product_id){ 
     $line['qty'] += $qty; 
     return; 
    } 
    } 
    $cart['lines'][] = array('product_id'=>product_id, 'qty'=>$qty); 
    return; 
} 

Конечно, вы могли бы (и, возможно, должны) идти дальше и объединить эту структуру и функции данных в набор классов , Тележки для покупок - отличное место для объективного ориентирования.

1

Встроенная функция array_count_values может выполнить эту работу.

например:

<?php 
$items = array(14,14,14,11,10); 
var_dump(array_count_values($items)); 
?> 

Выходы:

array(3) { 
    [14]=> 
    int(3) 
    [11]=> 
    int(1) 
    [10]=> 
    int(1) 
} 
1

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

Например:

$_SESSION['cart'] = array(
    'lines'=>array(
    array('product_id'=>14,'quantity'=>2, 'item_name'=>'Denim Jeans'), 
    ... 
    ) 
); 

Затем добавить новые элементы в корзину, вы можете просто сделать это:

$_SESSION['cart'][] = array('product_id'=45,'quantity'=>1, 'item_name'=>'Jumper'); 
0

Когда вы позволяете пользователю добавить элемент, который нужно добавить его в правое положение в массиве. Если идентификатор продукта уже существует в массиве, вам необходимо его обновить. Также всегда будьте осторожны с тем, что пользователи пытаются ввести нулевые или минусовые номера!