2016-03-23 12 views
1

I PHP

foreach ($_SESSION["cart_array"] as $each_item) { 
    $item_id = $each_item['item_id']; 
    $sql = mysqli_query($mysqli, "SELECT * FROM booklists WHERE book_id='$item_id' LIMIT 1"); 
    while ($row = mysqli_fetch_array($sql)) { 
     $product_name = $row["book_name"]; 

bir envanter sistemi kuruyorum benim $_SESSION kullanarak ben 1 miktarla sepetinde 2 öğe ekledi

bu

print_r($_SESSION["cart_array"]); 
ve 55

Array ( 
    [0] => Array ([item_id] => 37 [quantity] => 1) 
    [1] => Array ([item_id] => 32 [quantity] => 55) 
) 

benim oturumda [quantity] tüm değerleri güncelleştirme istiyorum. Bunu nasıl başarabileceğimi düşünüyorsun?

+1

$ SESSION, Aynı diğerleri gibi. Özel kılan ** SADECE ** şey, oturum mekanizması üzerinden otomatik olarak yüklenmiş/otomatik olarak kaydedilmesidir. Bunun dışında, herhangi bir DİĞER dizi gibi ona giriş/güncelleme/silme. –

cevap

1

Soru, miktarın ne kadar güncellenmesi gerektiğini bilmediğimden, ancak her bir quantity'u güncellemekten ziyade, böyle bir şey yapabilirsiniz.

foreach($_SESSION['cart_array'] as $index => $item){ 
    // Add 1 to each quantity 
    $_SESSION['cart_array'][$index]['quantity']++; 
} 

// Or... 

$increaseBy = 5; 
foreach($_SESSION['cart_array'] as $index => $item){ 
    // Increase by a fixed amount. 
    $_SESSION['cart_array'][$index]['quantity'] += $increaseBy; 
} 

// Or... 

foreach($_SESSION['cart_array'] as $index => $item){ 
    // Increase by a random number between 5 and 15. 
    $_SESSION['cart_array'][$index]['quantity'] += rand(5, 15); 
} 

// Or... 

foreach($_SESSION['cart_array'] as $index => $item){ 
    $increaseBy = $this->getQuantityIncrease($item['item_id']); 
    $_SESSION['cart_array'][$index]['quantity'] += $increaseBy; 
} 

// Or... 
// By using references. 
foreach($_SESSION['cart_array'] as $index => &$item){ 
    $increaseBy = $this->getQuantityIncrease($item['item_id']); 
    $item['quantity'] += $increaseBy; 
} 
+0

Efendim Fark ettim, Neden hala kullanıyorsun $ _SESSION ['cart_array'] [$ index] ['miktar'] ++ 'Eğer foreach içinde iseniz? Ben sadece '$ item [' quantity '] ++ 'kullanabilirsiniz. Eğer Yanlışsam beni düzelt. – rmondesilva

+0

Bu yalnızca '$ item' yerel değişkenini günceller, aslında $ _SESSION dizisini güncellemezdi. Foreach'ı, bunu düzeltebilecek '$ $ 'kullanacak şekilde değiştirirseniz inanıyorum, ama% 100 değilim. –

+1

@rmondesilva Doğru, bu örneğe bakın https://ideone.com/iQ9t5m. '&' Kullanmadan, referans yapmak, dizide güncellenmez. Referans kullanarak bir örnek ekledim. –

0

Sen döngü içinde böyle bir şey deneyebilirsiniz,

foreach ($_SESSION["cart_array"] as $key => $item) { 
    $_SESSION['cart_array'][$key]['quantity'] = 13; // set the qty you want 
} 
0

Bunu yapmak için bir foreach döngüsü kullanabilirsiniz.

$newQuantityValue = 10; 

foreach($_SESSION['cart_array'] as $key => $value){ 
    $_SESSION[$key]['quantity'] = $newQuantityValue; 
} 

Burada yaptığımız Bütün miktar için yeni bir değer atamak ve sonra bizim yeni değer ile miktar alanlarının her birini güncelleyebilirsiniz böylece bu durumda 10 ($_SESSION değişkeni yinelemenize bir foreach döngüsü kullanmaktır). foreach döngüsünden hakkında daha fazla bilgi için

, Olarak başvurusu the PHP Docs


Geçiş göz atın:

$newQuantityValue = 10; 

foreach($_SESSION['cart_array'] as $key => &$value){ 
    $value['quantity'] = $newQuantityValue; 
} 
: Sen eşit böyle referansla geçirilerek değerini değiştirebilecek

Referansla aktardığımız için, artık 012'ye başvurmaya gerek yoktur. the docs kaynaktan

: amacıyla

şirketinden & döngü Precede $ değeri içinde dizi elemanlarını değiştirmek mümkün. Bu durumda, değer referans ile atanacaktır. Bir yan not gibi


: Sadece böyle döngüye numarasını koymak hep birlikte yerine $newQuantityValue değişkeni sakınabileceğini: bir dizidir

foreach($_SESSION['cart_array'] as $key => $value){ 
    $_SESSION[$key]['quantity'] = 10; 
} 
İlgili konular