PHP: установка переменных сеанса через переменные переменные - PullRequest
2 голосов
/ 14 октября 2011

Я хотел бы установить переменную сеанса с чем-то похожим на:

$key = '_SESSION[element]';
$$key = 'value';

Это действительно устанавливает $_SESSION['element'] равным value, но, похоже, также очищает остальную часть моего $_SESSION переменная, в результате чего массив $_SESSION содержит только новую пару ключ / значение.

Как записать в сеанс, используя переменные переменные, не обнуляя его?

Редактировать: если это не может быть сделано, так и будет, нам, вероятно, придется реструктурировать и делать вещи «правильным» образом.Я просто хотел знать, было ли легко исправить

Ответы [ 3 ]

2 голосов
/ 14 октября 2011

@ Мала, я думаю, Эвал поможет тебе.Проверьте код ниже.Это может помочь вам в том, что вы хотите.

session_start();
    $_SESSION['user1'] = "User 1";
    $_SESSION['user2'] = "User 2";

    $key = "_SESSION['user3']";
    eval("\$$key = 'User 3';");

    foreach ($_SESSION as $key=>$value){
        echo $key." => ".$value."<br/>";
        unset($_SESSION[$key]);
    }
    session_destroy();

Если у вас все еще есть проблемы, дайте мне знать.Спасибо

2 голосов
/ 14 октября 2011

С Документация PHP :

Обратите внимание, что переменные переменные нельзя использовать с суперглобальными массивами PHP внутри функций или методов класса.Переменная $ this также является специальной переменной, на которую нельзя ссылаться динамически.

То, как вы оказались в такой ситуации, действительно сомнительно.Вы, вероятно, делаете что-то не так.

РЕДАКТИРОВАТЬ

Этот маленький трюк должен дать вам то, что вы хотите:

$key = '_SESSION[element]';
$key = str_replace(array('_SESSION[', ']'), '', $key);
$_SESSION[$key] = 'value';
var_dump($_SESSION);

Это в основном приведет кте же результаты, что и в ответе xdazz

1 голос
/ 14 октября 2011

Разве это не лучше?

$key = 'element';
$_SESSION[$key] = 'value';
...