我正在尝试创建一个PHP会话包装器类,为了让它更灵活,我需要能够动态地创建会话关联数组,如下所示:
'basket' => array(
27 => array(
'colour' => 'blue',
'qty' => 2,
'price' => 20.50
)
)设置会话的方法是调用:
Session::set(array('basket', $item_id, 'colour'), 'blue');
Session::set(array('basket', $item_id, 'qty'), 2);
Session::set(array('basket', $item_id, 'price'), 20.50);现在-我真的不确定如何从set()方法的第一个参数创建会话关联数组。
它可能只有一项,也可能超过4项--我的想法是让它成为动态的--而不管第一个数组参数中有多少项。
你知道怎样才能做到这一点吗?
发布于 2011-04-04 03:27:51
我想我明白你在说什么了。下面的代码很混乱,但它是一个概念证明。您建议的方法允许您在不重置整个数组的情况下重置更深的值,我相信这可以实现(数组中最多四个键)。您将需要做一些验证,以确保数组索引实际上已设置为防止任何错误,但在此之后,它将正常工作。
class SessionWrapper
{
public static function set($key, $value)
{
if (is_array($key)) {
$keyCount = count($key);
switch ($keyCount) {
case 1:
$_SESSION[$key[0]] = $value;
break;
case 2:
$_SESSION[$key[0]][$key[1]] = $value;
break;
case 3:
$_SESSION[$key[0]][$key[1]][$key[2]] = $value;
break;
case 4:
$_SESSION[$key[0]][$key[1]][$key[2]][$key[3]] = $value;
break;
default:
return false;
break;
}
return true;
}
$_SESSION[$key] = $value;
return true;
}
}
// single level
SessionWrapper::set('veggies', array(
$veg_id => array(
'color' => 'green'
)
));
// three keys deep
SessionWrapper::set(array('veggies', $veg_id, 'color'), 'green');
// four keys deep
SessionWrapper::set(array('states', 'PA', 'senators', 1), 'Robert Casey');
// array(
// 'states' => array(
// 'PA' => array(
// 'senators' => array(
// 1 => 'Robert Casey'
// )
// )
// )
// )发布于 2011-04-04 02:53:40
这有什么不对的吗?
$_SESSION['basket'] = array(
27 => array(
'colour' => 'blue',
'qty' => 2,
'price' => 20.50));我认为你正在尝试解决一个不存在的问题。您的session类提供了PHP的session功能没有提供的哪些功能?
发布于 2011-04-04 03:05:58
如下所示:
public function set($key, $arrayOrVar) {
$_SESSION[$key] = $arrayOrVar;
return $_SESSION[$key];
}??只需向它发送一个数组,它将对其进行会话(<-我完全是在保护该术语的版权)
也许我误解了,有什么理由让你的session类来做所有的数组混乱工作,而这看起来应该是你的代码的工作,而不是你的标准包含的永远不会改变的工作。
https://stackoverflow.com/questions/5531615
复制相似问题