设置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';
我强烈建议,您不会使用
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。要解决这个
我的函数的关键在于抽象整个过程,以便我不必直接与$ _SESSION变量进行交互 – 2012-02-08 15:08:05
您只使用全局函数,而您甚至可以改变在非全局函数中交互的方式,标准的方式(只有''__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;
}
请解释一下,要检索富怎么办。首先你将foo设置为bar。在这一点上,'foo'是一个字符串。接下来你把'foo [bar] [baz]'设置为无效。你现在期望什么样的行为?你是否想将'foo'从字符串转换为数组(例如'foo [bar] [blaz]'具有值blah)?或$ _SESSION ['foo']给你数组,使$ _SESSION ['foo'] ['bar'] ['baz'] =='blah? – 2012-02-08 15:02:38
我已经更新了我的问题,以便更清楚地告诉我如何编写$ _SESSION变量。在这一点上,我并没有太在意设置变量。 – 2012-02-08 15:06:47