将$ _SESSION键转换为局部变量

时间:2014-08-26 04:28:53

标签: php session variables session-variables

今天我有一个有趣的问题,我需要将$_SESSION['form'][$key]中存储的数据转换为本地变量。

例如,假设$_SESSION['form']包含以下会话密钥:

$_SESSION['form']['name']
$_SESSION['form']['email']
$_SESSION['form']['age']

如何将这些$_SESSION变量转换为:

$name
$email
$age

我认为for循环可以很好地解决这个问题,但我不确定如何在这种情况下正确地做到这一点。

感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

您需要使用PHP extract函数。

在你的情况下它应该是

<?php

$name = "its existing variable"; \\ note this existing variable ;)

extract($_SESSION['form'], EXTR_PREFIX_SAME, "from_session");

echo "$from_session_name, $email, $age, $name\n";

?>

答案 1 :(得分:0)

解决问题的方法很简单:

extract($_SESSION['form'])

然而,这不是最好的方法。没有理由绝对需要将变量定义为其关联索引。您只需使用下标访问关联数组即可。

答案 2 :(得分:0)

我有同样的问题移植一个依赖于POST或GET变量的应用程序,这些变量在旧PHP版本中被视为本地变量(它也适用于任何关联数组,如_COOKIE或_SESSION)。

升级操作系统时,根本没有脚本工作,因此我做了一个解决方法。为此,我使用以下代码编写了一个小的PHP脚本(即“convertirVarsLocales.php”):

<?
$keys = array_keys($_GET); 
$values = array_values($_GET);
for($i=0;$i<count($_GET);$i++) { 
        $$keys[$i] = $values[$i];
  }
$keys = array_keys($_POST);
$values = array_values($_POST);
for($i=0;$i<count($_POST);$i++) {
        $$keys[$i] = $values[$i];
}
?>

并包含此文件:

包括( “convertirVarsLocales.php”);

依赖于此功能的每个脚本。 这不是一个安全的选择,但似乎在安全的环境(在封闭网络上具有计费系统的用户)上工作正常。 希望这可以帮助。 此致