首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态创建$_SESSION关联数组

动态创建$_SESSION关联数组
EN

Stack Overflow用户
提问于 2011-04-04 02:36:51
回答 3查看 1.9K关注 0票数 1

我正在尝试创建一个PHP会话包装器类,为了让它更灵活,我需要能够动态地创建会话关联数组,如下所示:

代码语言:javascript
复制
'basket' => array(
   27 => array(
      'colour' => 'blue',
      'qty' => 2,
      'price' => 20.50
   )
)

设置会话的方法是调用:

代码语言:javascript
复制
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项--我的想法是让它成为动态的--而不管第一个数组参数中有多少项。

你知道怎样才能做到这一点吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-04 03:27:51

我想我明白你在说什么了。下面的代码很混乱,但它是一个概念证明。您建议的方法允许您在不重置整个数组的情况下重置更深的值,我相信这可以实现(数组中最多四个键)。您将需要做一些验证,以确保数组索引实际上已设置为防止任何错误,但在此之后,它将正常工作。

代码语言:javascript
复制
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'
//             )
//         )
//     )
// )
票数 1
EN

Stack Overflow用户

发布于 2011-04-04 02:53:40

这有什么不对的吗?

代码语言:javascript
复制
$_SESSION['basket'] = array(
     27 => array(
        'colour' => 'blue',
        'qty' => 2,
        'price' => 20.50));

我认为你正在尝试解决一个不存在的问题。您的session类提供了PHP的session功能没有提供的哪些功能?

票数 3
EN

Stack Overflow用户

发布于 2011-04-04 03:05:58

如下所示:

代码语言:javascript
复制
public function set($key, $arrayOrVar) {
   $_SESSION[$key] = $arrayOrVar;
   return $_SESSION[$key];
   }

??只需向它发送一个数组,它将对其进行会话(<-我完全是在保护该术语的版权)

也许我误解了,有什么理由让你的session类来做所有的数组混乱工作,而这看起来应该是你的代码的工作,而不是你的标准包含的永远不会改变的工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5531615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档