在会话中存储数组

时间:2013-12-24 20:58:59

标签: php arrays sorting session

所以我试图在一个会话中存储一个数组,但不是把它变成一个数组,它只是把所有的东西都计算在内!我只想要在会话中完成的值,所以我可以检查数字是否已经完成!有可能是一种更聪明的方法,但现在这样做了!

public function nextNumber($list) {

    $i = rand(1, count($list)-1);

    echo $list[$i];

    if (!in_array($list[$i], Session::get('savedlist'))) {
        Session::put('savedlist', Session::get('savedlist') + $list[$i]);

        var_dump(Session::get('savedlist'));

        return $list[$i];
    }

}

这是我的put函数

public static function put($name, $value) {
     return $_SESSION[$name] = $value;
}

public static function get($name) {
    return $_SESSION[$name];
}

2 个答案:

答案 0 :(得分:0)

我不知道我是否正确地回答了你的问题,但我认为put函数需要更新:

public static function put($name, $value) {
    if(empty($_SESSION[$name])){
       // create a new array with the given name
       $_SESSION[$name] = array($value);
    } else {
       // add a new item at the end of the array
       $_SESSION[$name][] = $value;
    }
}

[$name]之后添加两个方括号将$value作为$_SESSION[$name]末尾的新项目插入。否则它只是一个变量,而不是一个数组。

然后按如下所示更改nextNumber($list)功能

更改此行:

Session::put('savedlist', Session::get('savedlist') + $list[$i]);

Session::put('savedlist', $list[$i]);

因此新值将放在savedlist数组的末尾。

答案 1 :(得分:0)

我无法完全明白你想做什么,但既然你接受了@lastYorsh的回答,我会假设你想要像他这样的东西。

如果我们假设Session::get('savedlist')可以返回一个数组,那么你就不能 使用+符号向数组添加数字。 Session::get('savedlist') + $list[$i]

我认为@lastYorsh实现也应该有一个if statement 对于第二个参数是数组is_array()的情况。

此外。

  

警告:不能将标量值用作数组

试试这个

$_SESSION[$name] = []; // array();
$_SESSION[$name][] = $value;

但是

if (!in_array($list[$i], Session::get('savedlist'))) {

您无法在关联数组中使用in_array


这导致我们得出结论@lastYorsh答案不是你想要的。 保留Session实施原样并更改此

if (!in_array($list[$i], Session::get('savedlist'))) {
        $savedlist = Session::get('savedlist');
        array_push($savedlist, $list[$i]);
        Session::put('savedlist', $savedlist);