У меня с тобой какое-то время. У меня есть многомерный массив, который я храню в сеансе.
$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 из массива session1
но когда я делаю что-то вроде этого
unset($_SESSION['array1'][1]);
вы могли бы подумать, что $ _SESSION ['array1'] будет тогда = array ($ d1, $ d3, $ d4);
однако то, что это делает, фактически отменяет всю переменную сеанса.
Тогда, если я попробую что-то вроде
foreach ($_SESSION['array1'] as $k => $v) { echo "The Key is $k: The Value is $v"; }
однако это дает мне ошибку
Недопустимый аргумент для foreach ()
Единственный вывод, к которому я могу прийти, – это то, что переменная сеанса полностью отключена, а не только тот, что конкретный ключ удаляется из массива.
есть ли способ, которым я могу отключить определенное значение, содержащееся в массиве, который является частью переменной сеанса?
Код, который вы представляете, работает как ожидалось:
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);
с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 ( ... ) ) )
Итак, некоторые идеи отладки:
@session_start
. error_reporting(E_ALL)
Используйте array_splice, как показано в следующем коде:
$_SESSION['array1'] = array_splice($_SESSION['array1'],1,0);
Как насчет сохранения вашей переменной сеанса снова:
$_SESSION['array1'] = array($d1,$d3,$d4);