【问题标题】:how to update key of $_SESSION array with php variable value如何使用 php 变量值更新 $_SESSION 数组的键
【发布时间】:2017-02-16 12:53:06
【问题描述】:

我有一个问题,我似乎无法在任何地方找到答案。所以我把它放在这里。

我在 $_SESSION 变量中存储了以下变量:

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

现在我需要访问、更改并保存$_SESSION array 键及其值。我为此编写了以下代码:

extract($_SESSION);

这给了我名称为$_SESSION 键的变量,现在我需要将这些变量保存为$_SESSION 数组的更多键。如何将 php 变量保存为 $_SESSION 数组的键?

【问题讨论】:

  • $_SESSION[$var] = $value?
  • 你想回显保存在会话变量中的值是你想要的吗?
  • 您的意思是用新值替换现有键?
  • 不是不替换,而是保存新的键和值,名称参考以前的键
  • 试试这个(如果真的需要并且你之前做过extract($_SESSION);):foreach($GLOBALS as $k => $v){if(array_key_exists($k,$_SESSION))$_SESSION[$k]=$v; }

标签: php arrays session key


【解决方案1】:

当您出于某种原因需要使用extract() 方法时,您可以使用这种方法,但是对于这样的全局范围,您不应该使用extract() strong> 因为 $_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

【讨论】:

  • 在全局范围内使用 extract() 是一件非常麻烦的事情,应该不惜一切代价避免
  • @RiggsFolly - 绝对同意,但我们不知道 OP 的意图 - 也许只是为了测试。更新了答案。
  • 更好,但它与在全局范围内的一段代码中不使用extract 更相关。最好只在函数作用域内使用,这样就不会影响程序的全局变量,所有新变量都会在函数执行完毕后销毁
【解决方案2】:

$_SESSION 是一个数组,但要比较数据,您可以在该数组中创建数组。

如果您对数据执行此操作,则无需重命名名称值对中的键,因为它们在新的子数组中是唯一的。

警告:在全局范围内使用 extract 很糟糕,它会将变量喷射到您的全局范围内,这只会让您或必须维护您的脚本的人感到困惑。

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';    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-13
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多