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