2010-05-22 4 views
2

나는 PHP로 장바구니를 만드는 중입니다. 사용자가 여러 제품을 선택했는지 확인하려면 모든 것을 배열 ($ contents)에 넣습니다. 출력 할 때 "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

배열의 오른쪽 위치 어레이에 이미 제품 ID가 있으면이를 업데이트해야합니다. 또한 항상 0 또는 마이너스 숫자를 입력하는 사용자를 조심하십시오!

관련 문제