Ik zat een kleine probleempje ik heb een winkelwagen gemaakt dat werkt allemaal,
Alleen als je wilt updaten dan gaat het mis ik heb een foreach in een foreach gezet maar ik wist al dat dat fout zou gaan want de eerste foreach gaat loopen en dan loopt de andere foreach ook het aantal keren mee dus 3 x 3 krijg ik 9 outputs ipv gwn 3 dit is het script:
<?php
public function action_update() {
if (empty($this->cart)) {
Request::instance()->redirect('cart?message=error_empty');
}
if ($_POST && !empty($this->cart)) {
if (is_array($_POST) && is_array($this->cart)) {
foreach ($this->cart as $cart_artnr => $cart_quant) {
foreach ($_POST as $pp_artnr => $pq_quantity) {
// dit is alleen een check dus het aantal y * x
print_r('Artnr: ' . $pp_artnr . ' heeft ' . $pq_quantity . '<br/>');
}
}
} else {
throw new Exception('De post of shop is geen array.', '404');
}
}
}
?>
Enige idee hoe dit anders kan? want zover ik weet heb ik echt 2 foreach loops nodig 1 om alles uit de session cart te hallen en de andere om alles uit de $_POST array te halen...
Ik zat een kleine probleempje ik heb een winkelwagen gemaakt dat werkt allemaal,
Alleen als je wilt updaten dan gaat het mis ik heb een foreach in een foreach gezet maar ik wist al dat dat fout zou gaan want de eerste foreach gaat loopen en dan loopt de andere foreach ook het aantal keren mee dus 3 x 3 krijg ik 9 outputs ipv gwn 3 dit is het script
Eens in Nederlands om te zetten...
Verder moet kan je proberen de tweede foreach om te zetten naar $pq_quantity = $_POST[$cart_artnr];
Maar ik snap je script niet helemaal. Iig moet je in die richting zoeken.
@Pim: Ik weet niet wat je niet begrijpt maar ik zal het nog eens uitleggen.
In dat stukje script wil ik uit mijn session cart ($this->cart) de items uithalen door een foreach. Maar als het form wordt gesubmit dan wil ik ook een foreach $_POST om de waarde $cart_artnr te vergelijken met de $pp_artnr en de $cart_quant te updaten met de $pq_quant. maar het probleem is als je een foreach in een foreach zet dat de 2de foreach steeds mee loopt zolang de eerste foreach loopt dus bijv: foreach 1 loopt 5 keer maar de 2de foreach hoeft maar 2 keer dan output de 2de foreach loop 10keer de normale output die normaal maar 2 keer hoeft.
Ik snap de logica van je script niet en ook begrijp ik de afkortingen niet. Je gaat verschillende zaken door elkaar heen in een loop zetten. Dat lijkt me al niet juist.
<?php
foreach ($this->cart as $cart_artnr => $cart_quant) {
foreach ($_POST as $pp_artnr => $pq_quantity) {
// dit is alleen een check dus het aantal y * x
print_r('Artnr: ' . $pp_artnr . ' heeft ' . $pq_quantity . '<br/>');
}
}
?>
Leg mij eens uit wat die 1e foreach loop doet? Je doet namelijk helemaal niks met de variabelen $cart_artnr en $cart_quant.
@Tobias, nee ik weet al dat het in een array komt ik wil de eerste foreach kunnen vergelijken met de 2de maar stel je voor de eerste foreach heeft 4 waardes
en de tweede foreach loop maar 2 waardes dan loopt de eerste loop 4 x de 2de loop dus 8 keer... probeer het maar.. (zie hieronder een output voorbeeld)
Artnr: pp_2658 heeft 10
Artnr: pp_12589 heeft 20
Artnr: pp_2003 heeft 30
Artnr: pp_2658 heeft 10
Artnr: pp_12589 heeft 20
Artnr: pp_2003 heeft 30
Artnr: pp_2658 heeft 10
Artnr: pp_12589 heeft 20
Artnr: pp_2003 heeft 30
Probleem opgelost ik heb array_diff(); gebruikt.
Maar stel het huidige getal is 1 en ik wil nog 1 toevoegen dan doet hij dat natuurlijk niet want er is geen verschil dat is het jammere eraan.
<?php
public function action_update() {
if (empty($this->cart)) {
Request::instance()->redirect('cart?message=error_empty');
}
if ($_POST && !empty($this->cart)) {
if (is_array($_POST) && is_array($this->cart)) {
// Het verschill in posts
$differance = array_diff($_POST, $this->cart);
foreach ($differance as $artnr => $quantity) {
// Update de cart [artnr]
$_SESSION['cart'][$artnr] = $this->cart[$artnr] + $quantity;
}
// Terug sturen met een message dat het gelukt is.
request::instance()->redirect('cart?message=updated');
}
} else {
throw new Exception('De post of shop is geen array.', '403');
}
}
?>
@Tikkes, dat is niet zo slim wat jij doet... de for-loop loopt vaker dan het zou moeten omdat de foreach ook een aantal keer loopt.
Bijv: $_POST heeft 4 posts
de $this->cart heeft er 5
Dan krijg je ongeveer zoiets
Product 2021 bevat 20 aantal
Product 2025 bevat 5 aantal
Product 5069 bevat 55 aantal
Product 3386 bevat 81 aantal
Product 2021 bevat 20 aantal
Product 2025 bevat 5 aantal
Product 5069 bevat 55 aantal
Product 3386 bevat 81 aantal
Product 2021 bevat 20 aantal
Product 2025 bevat 5 aantal
Product 5069 bevat 55 aantal
Product 3386 bevat 81 aantal
Product 2021 bevat 20 aantal
Product 2025 bevat 5 aantal
Product 5069 bevat 55 aantal
Product 3386 bevat 81 aantal
Product 2021 bevat 20 aantal
Product 2025 bevat 5 aantal
Product 5069 bevat 55 aantal
Product 3386 bevat 81 aantal
En dat kost natuurlijk geheugen en snelheid, en dat is wat ik niet wil.
Maar de array_diff(); functie werkt goed!