Удаление элементов из сеанса - PullRequest
0 голосов
/ 23 августа 2010

У меня проблемы с удалением элементов в массиве сеансов в проекте корзины покупок. Следующий код должен взять выбранный элемент и удалить его из сеанса. Однако конечный результат - тот же сеанс, что и раньше, но ничего не удалено. Я видел подобные проблемы, прибегая к помощи, но пока не нашел рабочего решения. Вот урезанный код:

<?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
?>

Вот что print_r дает для следующего (используя «7» в качестве примера удаленного элемента):

$removeditem: 
7

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

Я что-то упускаю из виду?

Ответы [ 4 ]

7 голосов
/ 23 августа 2010

Вы удаляете элемент с КЛЮЧОМ, равным $ removeItem.Из вашего примера мне кажется, что вы пытаетесь удалить элемент со значением VALUE, равным удаленному элементу.В этом случае вам нужно выполнить цикл foreach, чтобы определить ключ, а затем удалить его.

foreach($_SESSION['stuff'] as $k => $v) {
  if($v == $removeditem)
    unset($_SESSION['stuff'][$k]);
}
3 голосов
/ 23 августа 2010

Вам нужно сначала получить key элемента, а затем unset его.Вот код, который вы должны использовать:

if(($key = array_search($removeditem, $_SESSION['stuff'])) !== FALSE)
     unset($_SESSION['stuff'][$key]);
0 голосов
/ 23 августа 2010

7 - это значение в массиве, а не ключ, поэтому сброс значения с помощью ключа 7 не сработает.Вам нужно сравнить каждый элемент в массиве с тем, который вы хотите удалить ($ _GET ['item']), извлечь его ключ и сбросить его.

0 голосов
/ 23 августа 2010

Самый простой способ:

<?php

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

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

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

?>

PS Не проверено ... просто концепция.

...