2010-08-23 25 views
0

Je n'arrive pas à supprimer des éléments d'une matrice de session dans un projet de panier. Le code suivant doit prendre l'élément sélectionné et le retirer de la session. Cependant le résultat final est juste la même session qu'avant avec rien enlevé. J'ai vu des problèmes similaires en googlant, mais je n'ai pas encore trouvé de solution de travail. Voici le code dépouillé:Suppression d'éléments d'une session

<?php 
session_start(); 
$removeditem = $_GET['item']; // this identifies the item to be removed 
unset($_SESSION['stuff'][$removeditem]); // "stuff" is the existing array in the session 
?> 

Voici ce que print_r donne pour les éléments suivants (en utilisant « 7 » comme l'exemple de l'élément supprimé):

$removeditem: 
7 

$_SESSION['stuff'] (before and after removal) 
Array 
(
    [0] => 7 
    [1] => 24 
    [2] => 36 
) 

Est-ce que je manque quelque chose évidente?

Répondre

7

Vous supprimez l'élément avec la clé égale à $ removedItem. Il me semble, d'après votre exemple, que vous essayez de supprimer l'élément dont la valeur est égale à removedItem. Dans ce cas, vous devez effectuer une boucle foreach pour identifier la clé, puis la supprimer.

foreach($_SESSION['stuff'] as $k => $v) { 
    if($v == $removeditem) 
    unset($_SESSION['stuff'][$k]); 
} 
+0

Ah oui, la clé contre la valeur est le problème. Fonctionne comme un charme. Merci pour l'aide! – funfetti

+0

Cela a fonctionné parfaitement pour moi. Je vous remercie. –

3

Vous devez d'abord obtenir l'key de l'élément puis unset il. Voici le code que vous devez utiliser:

if(($key = array_search($removeditem, $_SESSION['stuff'])) !== FALSE) 
    unset($_SESSION['stuff'][$key]); 
0

La façon la plus simple est:

<?php 

    session_start(); 
    $removeditem = $_GET['item']; 

    $temp = array_flip($_SESSION['stuff']); 

    unset($_SESSION['stuff'][$temp[removeditem]]); 

?> 

post-scriptum Non testé ... juste un concept.

0

7 est une valeur dans le tableau qui n'est pas une clé, donc la suppression de quelque chose avec la touche 7 ne fera pas l'affaire. Ce que vous avez à faire est de comparer chaque élément du tableau avec celui que vous voulez supprimer ($ _GET ['item']), de récupérer sa clé et de l'annuler.