0

我正在设置一个$_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 )

它没有创建新的会话变量。

这是因为我使用变量作为索引吗?我首先尝试将索引变量作为整数,现在作为字符串尝试,但结果是相同的。

4

2 回答 2

4

$_SESSION 变量必须是关联数组,因此

$_SESSION['33'] = 'foo';

不幸的是,它不起作用,因为 '33' 尽管是一个字符串,但将被转换为数组的整数键。有关如何自动投射键的更多详细信息:

http://us.php.net/manual/en/language.types.array.php

包含有效整数的字符串将被转换为整数类型。例如,键“8”实际上将存储在 8 下。另一方面,“08”不会被强制转换,因为它不是有效的十进制整数。

浮点数也被转换为整数,这意味着小数部分将被截断。例如,密钥 8.7 实际上将存储在 8 下。

布尔值也被转换为整数,即键 true 将实际存储在 1 下,而键 false 将存储在 0 下。

Null 将被强制转换为空字符串,即键 null 将实际存储在 "" 下。

于 2013-08-02T02:08:22.143 回答
1

仅从您向我们展示的内容来看,您是对的,print_r($_SESSION) 应该展示:

Array([iamloggedIn] => 1, [userID] => 5, [55] => 1, [59] => 1)

我会尝试在索引之前连接一个字符串,如下所示:

$_SESSION['example' . strval($vals[1])] = 1;

$_SESSION['example55']例如,通过 访问它。

于 2013-08-02T01:51:55.233 回答