设置PHP多维会话变量

问题描述:

说我有一个名为set_session_variable功能,看起来像:设置PHP多维会话变量

function set_session_variable($name, $value) { 
    // ...write value to the specified path 
} 

我怎么会写这个功能(不使用eval),这样我可以这样做:

set_session_variable('foo', 'bar'); // Would set $_SESSION['foo'] = 'bar'; 
set_session_variable('foo[bar][baz]', 'blah'); // Would set $_SESSION['foo']['bar']['baz'] = 'blah'; 
+1

请解释一下,要检索富怎么办。首先你将foo设置为bar。在这一点上,'foo'是一个字符串。接下来你把'foo [bar] [baz]'设置为无效。你现在期望什么样的行为?你是否想将'foo'从字符串转换为数组(例如'foo [bar] [blaz]'具有值blah)?或$ _SESSION ['foo']给你数组,使$ _SESSION ['foo'] ['bar'] ['baz'] =='blah? – 2012-02-08 15:02:38

+0

我已经更新了我的问题,以便更清楚地告诉我如何编写$ _SESSION变量。在这一点上,我并没有太在意设置变量。 – 2012-02-08 15:06:47

我强烈建议,您不会使用

set_session_variable('foo[bar][baz]', 'blah'); 

而是

set_session_variable('foo', array('bar'=>array('baz' => 'blah'))); 

此外,你并不需要在所有的函数调用为:

$_SESSION['foo']['bar']['baz'] = 'blah'; 

可以更改$_SESSION实施与session save handler

如果您只关心如何解析像'foo[bar][baz]'这样的字符串,那么之前会询问这个字符串,例如use strings to access (potentially large) multidimensional arrays。要解决这个

+0

我的函数的关键在于抽象整个过程,以便我不必直接与$ _SESSION变量进行交互 – 2012-02-08 15:08:05

+1

您只使用全局函数,而您甚至可以改变在非全局函数中交互的方式,标准的方式(只有''__SESSION'在那里,我很确定)。无论如何,你会看到第二个示例代码行和链接的问题/答案。两者都应该适合你的需求。 – hakre 2012-02-08 15:13:46

一种方法是模仿函数重载,例如在这个岗位 - >PHP function overloading

另一种方式是一个字符串参数添加到您的功能,与你的分隔数组索引。 例如:set_session_variable('foo','bar','baz; key'); 将'bar'值保存到foo ['baz'] ['key']中。

所有你需要做的是撕开第三个参数(我使用;作为分隔符在这里)。

一个更相关的问题是为什么你需要一个函数。函数调用有成本,并且函数似乎没有做有用的工作。

实例分配:

$_SESSION['foo'] = 'bar'; 
$_SESSION['foo']['bar']['baz'] = 'blah'; 
$foo['bar']['baz'] = 'blah'; 
$_SESSION['foo'] = $foo; 

在直接回答你的问题:你可以解析$名set_session_variable()内使用PCRE模块和正则表达式的值。

即使更简单也更快速的解决方法是使用sscanf(),前提是您能够并愿意对数组键的命名施加约定。

的清洁替代功能:

$array['bar']['baz'] = 'blah'; 
set_session_variable('foo', $array); 
function set_session_variable($key, $val) { 
    $_SESSION[$key] = $val; 
}