我正在设置一个带变量索引的$_SESSION
变量,但它不成立。
if (isset($_GET['reply']))
{
echo $_SERVER['QUERY_STRING']; // example output: reply&55
$vals = explode('&',$_SERVER['QUERY_STRING']); // val[1] = 55
session_start();
$_SESSION[strval($vals[1])] = 1; //tried as int first and now convert to string
print_r($_SESSION);
}
当我查看$ _SESSION的内容时,它会显示:Array ( [iamloggedIn] => 1 [userID] => 5 [55] => 1 )
它显示了两个使用普通字符串索引设置的变量(例如$_SESSION['userID'] = 5)
,然后是最后一个
会话变量刚刚设置。
现在,如果使用val [1]中的新值再次调用此if语句,例如59,则覆盖最后一个,我的print_r
将显示
类似于:Array ( [iamloggedIn] => 1 [userID] => 5 [59] => 1 )
它没有创建新的会话变量。
这是因为我使用变量作为索引吗?我首先尝试将索引变量作为整数,现在作为字符串,但结果是相同的。
答案 0 :(得分:4)
$ _SESSION变量必须是关联数组,因此
$ _ SESSION ['33'] ='foo';
不幸的是不会工作,因为'33'尽管是一个字符串将被转换为数组的整数键。有关如何自动投放密钥的更多详细信息:
http://us.php.net/manual/en/language.types.array.php
包含有效整数的字符串将强制转换为整数类型。例如。键“8”实际上将存储在8下。另一方面,“08”将不会被强制转换,因为它不是有效的十进制整数。
浮点数也会转换为整数,这意味着小数部分将被截断。例如。密钥8.7实际上将存储在8下。
Bool也会被转换为整数,即键值true实际上将存储在1下,而键值为0则为false。
Null将被强制转换为空字符串,即密钥null实际上将存储在“”。
下
答案 1 :(得分:1)
仅根据您向我们展示的内容判断,您是对的,print_r($_SESSION)
应显示:
Array([iamloggedIn] => 1, [userID] => 5, [55] => 1, [59] => 1)
我会尝试在索引之前连接一个字符串,如下所示:
$_SESSION['example' . strval($vals[1])] = 1;
例如,通过$_SESSION['example55']
访问它。