2017-02-16 82 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';