通过函数参数设置多维数组

时间:2014-02-10 15:41:34

标签: php arrays session

我正在为我的框架开发一个简单的会话管理器。我试图为会话数据设置一个更友好的用户结构。基本上我的会话存储如下:

 $app_name = "Some_App_Name";
 $component = "notifications";
 $key = "errors";
 $value = "There was some error";
 $_SESSION[$app_name][$component][$key] = $value;

我面临的问题是通过会话类中的参数创建此结构。我有一个set方法,理想情况下应该设置一个会话值。默认情况下,上面列出的$ app_name通过构造函数添加到会话类中,但我需要找到一种简单的方法来获取方法中传入的参数,然后创建其余的参数。一个简单的例子:

// Where keys could be: $key1 = notifications, $key2 => "notices"
public static function set($key1,$key2,$value) {
    $_SESSION[self::$app_name][$key1][$key2] = $value;
}

如果我总是有4个参数,上面会有效但在某些情况下我可能只有2个参数。我可以传递2个参数(都是一个数组),但我正在寻找一种更简化的方法(如果存在这样的方法)。

通过创建结构和设置值,我还需要一种类似的方法来验证值或最后一个键是否存在:

// Where keys could be: $key1 = notifications, $key2 => "errors"
public static function exists($key1,$key2) {
    if(isset($_SESSION[self::$app_name][$key1][$key2])) {
    return true;
}

非常感谢任何建议。

2 个答案:

答案 0 :(得分:0)

$params = array(
    "key1" => "value1",
    "key2" => "value2",
    "value" => "value"
);

public static function set($params = NULL)  //default null if no value is passed
{
    if (!self::exists($params)) return false;

    $_SESSION[self::$app_name][$params["key1"]][$params["key2"]] = $value;
    return true;        

} 


public static function exists($params = NULL) 
{
    if(isset($_SESSION[self::$app_name][$params["key1"]][$params["key2"]])) 
    {
        return true;
    }
    return false;
}

答案 1 :(得分:0)

为了帮助其他想要做类似事情的成员,我想强烈建议你不要使用这个概念,这听起来是个好主意,但你的真正问题在于阵列本身的管理。与$ _SESSION超全球直接合作确实是更强大的选择:

  • 即使为服务器和组件说明了一个参数($ _SESSION ['somename'] ['auth']),当你想从另一个对象实例访问该级别的内容时会发生什么?假设我有$ _SESSION ['somename'] ['errors']的另一个会话对象实例,但需要访问$ _SESSION ['somename'] ['auth']中的属性,但是在范围内,我在会话数组中的基数是不正确的。

  • 添加属性很好$ this-> session-> add(“key”,“name”)但是如果要附加到该数组(其中name实际上是一个数组而不仅仅是一个数组)该怎么办?价值),反之亦然。或者如果$ _SESSION ['somename'] ['auth'] ['key'] ['name']实际上有另一个键或值,则检查是否存在?

在过去的几天里,所有人都使用了这个,我可以肯定地说,编写一个“功能齐全”的会话管理器课程可能并不是不可能的,但为了简单起见,最好还是工作。直接使用会话数组,因为它的代码更少,问题更少。