2

PHPでショッピングカートを作っています。ユーザーが複数の製品を選択したかどうかを確認するには、すべてを配列 ($contents) に入れます。出力すると「14,14,14,11,10」のようになります。「3 x 14、1 x 11、1 x 10」のようなものが欲しいです。それを行う最も簡単な方法は何ですか?私は本当にそれを行う方法がわかりません。

これは私のコードの最も重要な部分です。

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

前もって感謝します。

4

4 に答える 4

6

より堅牢なカートの実装を構築してみませんか?

次のようなデータ構造から始めることを検討してください。

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

もちろん、さらに進んで、このデータ構造と関数を一連のクラスに結合することもできます (おそらくそうすべきです)。ショッピング カートは、オブジェクト指向の考え方を始めるのに最適な場所です。

于 2010-05-22T22:01:38.260 に答える
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)
}
于 2010-05-22T22:26:16.223 に答える
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');
于 2011-10-16T22:46:09.550 に答える
0

ユーザーにアイテムを追加させるときは、配列の正しい位置に追加する必要があります。製品 ID が配列に既に存在する場合は、それを更新する必要があります。また、ゼロやマイナスの数字を入力しようとするユーザーには常に注意してください。

于 2012-11-23T12:48:27.043 に答える