2011-10-14 169 views
2

我想設定到一個類似於會話變量:PHP:通過可變的變量設置會話變量

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

這確實設置$_SESSION['element']等於value,但它似乎也清楚的其餘部分我$_SESSION變量,導致$_SESSION數組只包含新的鍵/值對。

如何使用變量變量寫入會話而不用加密?

編輯:如果不能這樣做,那就這樣吧,我們可能不得不進行重組,並以「正確」的方式做事。我只是想知道是否有一個簡單的辦法

+2

請詳細說明爲什麼你不能只使用普通的'$ _SESSION [「$ key」]'數組訪問。 – mario

+0

爲什麼你想使用變量? –

+0

@mario:這段代碼處理很多(非會話)變量賦值,我不能編輯它(沒有批准等) - 我的模塊只能控制它發送的鍵和值。如果這不能做,我們會重組,並做到「正確」,但如果有一個簡單的解決方案,從我的模塊單獨完成這將是可愛的 – Mala

回答

2

PHP Documentation

請注意,可變的變量不能與函數或類方法中PHP的 超全局陣列中使用。變量 $這也是一個特殊變量,不能被動態引用 。

如何結束這樣的情況真的值得懷疑。你可能做錯了什麼。

編輯

這個小動作應該給你你想要的東西:

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

這基本上都會產生相同的結果xdazz的答案

+0

關於來自文檔的引用,是的,我看到了,但我沒有在這部分代碼中的函數或方法。我知道這樣做是「錯誤的」,最好不要這樣做,但如果5分鐘的修復能夠在一次性代碼塊中節省50小時的重組時間,那麼我就是這麼做的。 – Mala

+0

關於你提供的代碼,除非我錯了,那是讀變量,而不是寫...... – Mala

1

是不是這種方式更好?

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

@Mala,我認爲eval會幫助你。 檢查下面的代碼。它可以幫助你爲你想要的。

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(); 

如果您仍然有任何問題,請告訴我。謝謝