2016-03-23 6 views
1

Ich erstelle ein Inventar-System in 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"]; 

Wenn ich mein Echo $_SESSION mit diesem

print_r($_SESSION["cart_array"]); 

Ich habe 2 Artikel in den Warenkorb gelegt mit der Menge von 1 und 55

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

ich möchte Update alle der [quantity] Werte in meiner Sitzung. Wie denkst du, kann ich es erreichen?

+1

$ _SESSION ist ein Array, wie jede andere. Das einzige, was es besonders macht, ist, dass es über den Sitzungsmechanismus automatisch geladen/automatisch gespeichert wird. Ansonsten greifen Sie auf/aktualisieren/löschen Dinge darin wie jedes andere Array. –

Antwort

1

Die Frage ist nicht übermäßig klar, da ich nicht weiß, was die Menge aktualisiert werden muss, aber um jedes quantity zu aktualisieren, könnten Sie so etwas tun.

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

Sir Ich habe gerade bemerkt, warum immer noch '$ _SESSION ['cart_array'] [$ index] ['menge'] ++' wenn du schon in foreach bist? Ich denke du kannst nur '$ item ['quantity'] ++' benutzen. Korrigiere mich, wenn ich falsch liege. – rmondesilva

+0

Das würde nur die lokale Variable $ item aktualisieren, es würde das Array $ _SESSION nicht wirklich aktualisieren. Ich glaube, wenn Sie die foreach ändern, um '& $ item' zu verwenden, das das beheben kann, aber ich bin nicht 100%. –

+1

@rmondesilva Ich war richtig, siehe dieses Beispiel https://ideone.com/iQ9t5m. Ohne Verwendung von '&' wird es im Array nicht aktualisiert. Ich habe ein Beispiel mit einer Referenz hinzugefügt. –

0

Sie können so etwas wie dies in der Schleife versuchen,

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

können Sie eine foreach-Schleife verwenden, um dies zu tun.

$newQuantityValue = 10; 

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

Alles, was wir hier tun, ist es, einen neuen Wert für unsere Menge zuweisen und dann eine foreach-Schleife durch die $_SESSION Variable zu wiederholen, so dass wir 10 jede Ihrer Mengenfelder mit unserem neuen Wert (in diesem Fall aktualisieren).

Weitere Informationen über foreach-Schleifen Besuche die the PHP Docs


Pass von Referenz:

$newQuantityValue = 10; 

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

Sie gleichermaßen den Wert, den es unter Bezugnahme indem wie dies ändern könnte

Weil wir es als Referenz übergeben, gibt es keine Notwendigkeit mehr, die 012 zu referenzieren

Von the docs:

Um in der Lage zu sein, direkt mit & Array-Elemente in der Schleife precede $ Wert zu ändern. In diesem Fall wird der Wert als Referenz zugewiesen.


Als Randbemerkung: Sie mit den $newQuantityValue Variable verzichten könnten alle zusammen und stattdessen nur die Nummer in dem wie diese Schleife setzen:

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