2010-09-10 4 views
0

Я хотел бы создать простую корзину покупок с использованием массивов. Мне нужно отображать каждый уникальный элемент в корзине покупок, а также количество каждого элемента вместе.Как подсчитать количество каждого уникального массива внутри многомерного массива? PHP

Моя первая тележка массив может выглядеть следующим образом:

$cart= 

array(

     array(2003,100,"Table") 
     ,array(2003,100,"Table") 
     ,array(2003,100,"Table") 
     ,array(2004,200,"Chair") 
     ,array(2004,200,"Chair") 

    ); 

Первое значение в каждом массиве является product_id, то цена & затем название продукта.

Как распечатать каждый уникальный элемент один раз, а также количество каждого из них?

Заранее спасибо.

+2

Возможно, вам следует сохранить их уникально в первую очередь. Массив с ключом product_id с количеством для каждого элемента массива будет намного проще управлять. Я предлагаю вам ознакомиться с ассоциативными массивами (словарями), которые намного более надежны для таких задач. – Keyo

ответ

1

Можно просто перебирать массив и использовать идентификатор продукта в качестве ключа для подсчета суммы:

$amounts = array(); 
foreach ($cart as $item) { 
    if (!isset($amounts[$item[0]])) $amounts[$item[0]] = 0; 
    $amounts[$item[0]]++; 
} 

Но было бы проще, если ваша корзина просто хранит идентификаторы продукта и составляет, таким образом:

array(
    2003 => 3, 
    2004 => 2 
) 

Это на самом деле то, что делает вышеприведенный алгоритм. Но при этом у вас есть вся необходимая информация (идентификатор продукта и сумма).

+0

Отлично! Вы правы, это имеет смысл, если массив хранит количество. – matt

2
$new_cart = array(); 

foreach($cart as $product) { 
    if(!isset($new_cart[$product[0]])) { 
     $new_cart[$product[0]] = array('quantity' => 1, 'label' => $product[2], 'price'  => $product[1]); 
    } 
    else { 
     $new_cart[$product[0]]['quantity']++; 
    } 
} 

Я настоятельно рекомендую использовать ассоциативные массивы для этого. Ваша проблема заключается в том, как вы храните значения. Попробуйте использовать что-то вроде этого:

$cart_items = array(
    2004 => array('quantity' => 3, 'label' => 'Leather Chair', 'price' => 200), 
    2901 => array('quantity' => 1, 'label' => 'Office Desk', 'price' => 1200), 

); 

Когда пользователь обновляет количество или добавляет существующий продукт, просто увеличивайте его количество.

+0

Спасибо! Это имеет большой смысл. Я сразу вижу, как было бы проще использовать ассоциативный массив. – matt

+1

Вы должны принять ответ! – axsuul

Смежные вопросы