【问题标题】:Convert $_SESSION keys to local variables将 $_SESSION 键转换为局部变量
【发布时间】:2014-10-19 07:42:09
【问题描述】:

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

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

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

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

$name
$email
$age

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

感谢您的帮助!

【问题讨论】:

  • 您可以像使用$name 一样使用$_SESSION['form']['name'],所以您确定需要这样做吗?
  • extract($_SESSION['form']) ? (但要小心 - 阅读警告)

标签: php session variables session-variables


【解决方案1】:

您需要使用 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";

?>

【讨论】:

  • 非常感谢!只有一个问题:$name 是否需要像您在示例中所做的那样存在?
  • 不,我只是想演示一下如果变量名称发生冲突会怎么做。例如,这里的“名称”是一个现有变量,所以它附加了前缀。
【解决方案2】:

解决问题的方法很简单:

extract($_SESSION['form'])

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

【讨论】:

  • 那么最好的方法是什么?
【解决方案3】:

我在移植依赖于旧 PHP 版本的本地 POST 或 GET 变量的应用程序时遇到了同样的问题(它也适用于 _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];
}
?>

并包含此文件:

include("convertirVarsLocales.php");

在依赖此功能的每个脚本上。 这不是一个安全的选项,但它似乎在安全环境(在封闭网络上具有计费系统的用户)上运行良好。 希望这可以帮助。 问候

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    相关资源
    最近更新 更多