2014-01-28 3 views
3

У меня есть время с этим. У меня есть многомерный массив, который я храню в сеансе.unset многомерный массив

$d1 = array(1,2,3,4); 
$d2 = array(1,2,3,4,5,6); 
$d3 = array(1,2,3,4,5,6,7,8); 
$d4 = array(1,2,3,4,5); 
$_SESSION['array1'] = array($d1,$d2,$d3,$d4); 

, что я хочу сделать, это удалить массив $ d2 из сеанса array1

однако когда я делаю что-то вроде этого

unset($_SESSION['array1'][1]); 

вы бы подумать, что $ _SESSION [ 'array1' ] then = array ($ d1, $ d3, $ d4);

однако то, что это делает, фактически отменяет всю переменную сеанса.

Тогда, если я пытаюсь что-то вроде

foreach ($_SESSION['array1'] as $k => $v) { 
echo "The Key is $k: The Value is $v"; 
} 

однако, что дает мне ошибку

Недействительный аргумент для Еогеасп()

Единственный вывод, который я могу прийти к тому, что сессии переменная полностью отменяется, а не только, что конкретный ключ удаляется из массива.

Есть ли способ, которым я могу отключить определенное значение, содержащееся в массиве, который является частью переменной сеанса?

+1

Там должно быть что-то еще не так в коде. Попробуйте комментировать строку 'unset (...)' и 'var_dump'ing' $ _SESSION'. –

ответ

1

код вы настоящие произведения, как и ожидалось:

header("Content-Type: text/plain"); 
session_start(); 
$d1 = array(1,2,3,4); 
$d2 = array(1,2,3,4,5,6); 
$d3 = array(1,2,3,4,5,6,7,8); 
$d4 = array(1,2,3,4,5); 
$_SESSION['array1'] = array($d1,$d2,$d3,$d4); 
unset($_SESSION['array1'][1]); 
print_R($_SESSION); 

Печать:

Array 
(
    [array1] => Array 
     (
      [0] => Array 
       (
        ... 
       ) 

      [2] => Array 
       (
        ... 
       ) 

      [3] => Array 
       (
        ... 
       ) 

     ) 

) 

Так что некоторые отладочные идеи:

  1. Не использовать @session_start.
  2. Набор error_reporting(E_ALL)
  3. Настройка сообщений об ошибках в php.ini
  4. Проверьте печенье, чтобы увидеть, был ли PHPSESSID печенья послал на всех.
+0

спасибо, я fogot, чтобы сделать session_start в начале скрипта – user3005635

+0

Пожалуйста, все еще смотрите на ответ sємsєм. Хорошо иметь массивы, упорядоченные как '(0, 1, 2 ...)'. 'unset' не сохраняет этого. –

0

Как насчет снова хранить переменную сеанса:

$_SESSION['array1'] = array($d1,$d3,$d4); 
1

Используйте array_splice, как показано в следующем коде:

$_SESSION['array1'] = array_splice($_SESSION['array1'],1,0); 
+0

Очень хорошая точка, unset оставляет одно смещение пропущено: '(0, 2, ...)' –

Смежные вопросы