2017-02-16 34 views
2

我有一個問題,我似乎無法找到任何地方的答案。所以我把它放在這裏。

我都存儲在下面的變量$ _SESSION變量:

$_SESSION["pr_first_name"] ="Thomas"; 
$_SESSION["pr_middle_name"] ="Richard"; 
$_SESSION["pr_last_name"] ="Peterson"; 

現在我需要訪問,更改,然後保存$_SESSION array鍵和它們的值。我寫了下面的代碼是:

extract($_SESSION); 

這給了我與$_SESSION鍵的名稱中的變量,現在我需要這些變量保存爲$_SESSION陣列的其他密鑰。如何將php變量保存爲$_SESSION數組的鍵?

+0

'$ _SESSION [$ var] = $ value'? – Ad5001

+0

你想要回顯保存在會話變量中的值是你想要的嗎? –

+0

你的意思是用新值替換現有的鍵? – RiggsFolly

回答

0

的當您需要使用extract()方法無論出於何種原因,那麼你可以使用這種方法,但你不應該使用extract()這樣的全球範圍爲$ _SESSION是:

$_SESSION["pr_first_name"] ="Thomas"; 
$_SESSION["pr_middle_name"] ="Richard"; 
$_SESSION["pr_last_name"] ="Peterson"; 

$keys = array_keys($_SESSION); 
extract($_SESSION); 
... 
... 
foreach($keys as $key){ 
    $_SESSION[$key] = ${$key}; 
} 

但更好和更簡單的方法是使用_SESSION在$正常數組:

$tmp = $_SESSION["pr_first_name"]; 
... 
$_SESSION["pr_first_name"] = $tmp 
+1

在全局範圍內使用'extract()'是一件令人討厭的混亂事情,應該儘量避免使用 – RiggsFolly

+1

@RiggsFolly - Definitelly同意,但我們不知道OP的意圖 - 也許只是爲了測試。更新了答案。 –

+0

更好,但它更多地與在全局範圍內的一段代碼中不使用「提取」相關。最好只在函數範圍內使用它,那麼它不會影響程序全局變量,並且一旦函數完成,所有新變量就會被銷燬 – RiggsFolly

0

$ _SESSION是一個數組,但爲了比較數據,您可以在該數組中創建數組。

如果您對數據執行此操作,則不需要重命名名稱值對中的鍵,因爲它們在新子數組內是唯一的。

警告:在全局範圍內使用提取是令人討厭的,它會將變量噴射到全局範圍中,以後只會混淆您或必須維護腳本的人員。

session_start(); 

$_SESSION["pr_first_name"] ="Thomas"; 
$_SESSION["pr_middle_name"] ="Richard"; 
$_SESSION["pr_last_name"] ="Peterson"; 

$t = array(
      'pr_first_name' => $_SESSION["pr_first_name"], 
      'pr_middle_name' => $_SESSION["pr_middle_name"], 
      'pr_last_name' => $_SESSION["pr_last_name"] 
     ); 

$_SESSION['new_names'] = $t; 


// now amend the new occurance in SESSION however you like 
$_SESSION['new_names']['pr_first_name'] = 'Some new value'; 
$_SESSION['new_names']['pr_first_name'] = 'Some new value'; 
$_SESSION['new_names']['pr_first_name'] = 'Some new value'; 

或者,如果您有一個更大的想要複製的$ _SESSION中的發生列表,

session_start(); 

function new_names($sess) 
{ 
    $picks = ['pr_first_name', 'pr_middle_name', 'pr_last_name' ]; 
    $new = []; 
    foreach ($picks as $name) { 
     $new[$name] = $sess[$name]; 
    } 
    return $new;    
} 

$_SESSION["pr_first_name"] ="Thomas"; 
$_SESSION["pr_middle_name"] ="Richard"; 
$_SESSION["pr_last_name"] ="Peterson"; 

$_SESSION['new_names'] = new_names($_SESSION); 

// now amend the new occurance in SESSION however you like 
$new = $_SESSION['new_names']; 
$new['pr_first_name'] = 'Some new value'; 
$new['pr_first_name'] = 'Some new value'; 
$new['pr_first_name'] = 'Some new value';  

當然,如果你從一開始就使用了這種區隔。這將是更容易創建一組新的數據

$_SESSION['first']["pr_first_name"] ="Thomas"; 
$_SESSION['first']["pr_middle_name"] ="Richard"; 
$_SESSION['first']["pr_last_name"] ="Peterson"; 

$_SESSION['new'] = $_SESSION['first']; 
$new = $_SESSION['new']; 
$new['pr_first_name'] = 'Some new value'; 
$new['pr_first_name'] = 'Some new value'; 
$new['pr_first_name'] = 'Some new value';