Beste mensen,

Na veel research ben ik er niet uitgekomen dus vraag ik jullie om hulp. Ik heb een array met producten:


 $SESSION['winkelmandje'] = array(
                     array('id' => '1', 'hoeveelheid' => '1'), 
                     array('id' => '3', 'hoeveelheid' => '1'),
                     array('id' => '2', 'hoeveelheid' => '1') 

             );


Hierbij heb je dus voor elk product in het winkelmandje een subarray. Maar nu wil ik het mogelijk maken om een product uit het winkelmandje te halen door op een knop te klikken. Ik probeerde dat zo:


   function removeProduct($idVal){
      foreach($_SESSION['winkelmandje'] as $subArray){
         if($subArray[id] == $idVal){
            unset($_SESSION['products'][$subArray]);
         }
         return($_SESSION['products']);
      }
   }

   if(isset($_POST['verwijder']{
      removeProduct(2);
   }



Volgens mijn redenering zou hij nu dus de laatste subarray moeten verwijderen. Echter gebeurd dit niet. Kan iemand wat ik fout doe?




Groetjes,

Sem
Na herstellen van fouten en aangenomen dat het winkelmandje moet aangepast, heb ik dit bedacht.
 <?php

$_SESSION['winkelmandje'] = [
	array('id' => '1', 'hoeveelheid' => '1'), 
	array('id' => '3', 'hoeveelheid' => '1'),
	array('id' => '2', 'hoeveelheid' => '1')
	];

function removeProduct( $idVal )
{
	for ($i = 0; $i < count($_SESSION['winkelmandje']); $i++)
	{
		if( $_SESSION['winkelmandje'][$i]['id'] == $idVal )
		{
			unset($_SESSION['winkelmandje'][$i]);
		}
	}
}

echo '<pre>' . print_r( $_SESSION['winkelmandje'], TRUE ) . '<pre>';

$_POST['verwijder'] = 2;

if( isset( $_POST['verwijder'] ) )
{
	removeProduct($_POST['verwijder']);
}

echo '<pre>' . print_r( $_SESSION['winkelmandje'], TRUE ) . '<pre>';
?>
Uhm, en als je het er nou gewoon eens fatsoenlijk instopt?

Maak een "products" subarray in $_SESSION, of "cart" of wat dan ook:
<?php
// init cart
$_SESSION['products'] = array();
?>

En als je een product toevoegt, doe je dit op key:
<?php
$_SESSION['products'][5] = 2; // voeg 2x product met id 5 toe
?>

(Dit is een zogenaamde "mapping" van product id naar aantal in een subarray)
Het verwijderen is dan ook een stuk makkelijker uiteraard...

Reageren