PHP alışveriş sepeti birden fazla ürün

4 Cevap php

PHP bir alışveriş sepeti yapma ilerleme değilim. Bir kullanıcı birden fazla ürün seçilmiş olup olmadığını kontrol etmek için, bir dizi ($ içerik) her şeyi koymak. Ben çıktı, ben "14,14,14,11,10" gibi bir şey olsun. Ben "3 x 14, 1 x 11, 1 x 10" gibi bir şey olmasını istiyorum. Bunu yapmak için en kolay yolu nedir? Ben gerçekten bunu yapmak için nasıl hiçbir ipucu var.

Bu benim kod en önemli parçasıdır.

    $_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>';

Şimdiden teşekkürler.

4 Cevap

Neden daha sağlam bir sepeti uygulaması oluşturmak değil?

Böyle bir veri yapısı ile başlayan göz önünde bulundurun:

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

Veya benzer.

Sonra sepeti yapısı üzerinde işlem fonksiyonları bir dizi oluşturabilirsiniz:

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;
}

Tabii ki, (ve belki de olmalı) daha ileri gitmek ve sınıfları bir dizi içine bu veri yapısını ve fonksiyonlarını birleştirmek olabilir. Alışveriş arabaları nesne yönelimli bir şekilde thining başlamak için harika bir yer vardır.

Yerleşik array_count_values function kudreti iş yapar.

Örn:

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

Çıkışlar:

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

Sen daha sağlam bir yapı içinde veri depolamak için çok boyutlu bir dizi kullanarak yararlanacak.

Örneğin:

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

Sonra sadece bunu yapabilirsiniz Sepete yeni öğeler eklemek için:

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

Bir kullanıcı bir öğe ekleyelim zaman dizideki doğru pozisyonda eklemeniz gerekir. Ürün kimliği zaten dizide varsa, bunu güncellemeniz gerekir. Ayrıca her zaman sıfır veya eksi numaralarını girmek için çalışırken kullanıcıların dikkatli olun!