2012-10-26 48 views
1

在PHP中,它可能有一个数组,其中一个字符串以前存储?php无法创建和分配数组

echo "valuebefore: ".$_SESSION['REQUEST_TOKEN'][TL_MODE]; 
$_SESSION['REQUEST_TOKEN'][TL_MODE] = "somestring"; 

echo "typebefore: ".gettype($_SESSION['REQUEST_TOKEN'][TL_MODE]); 
$_SESSION['REQUEST_TOKEN'][TL_MODE] = array(); 

echo "typeafter: ".gettype($_SESSION['REQUEST_TOKEN'][TL_MODE]); 
if (!is_array($_SESSION['REQUEST_TOKEN'][TL_MODE])) 
{ 
    echo "is not an array"; 
} 
echo "valueafter: ".$_SESSION['REQUEST_TOKEN'][TL_MODE]; 

,输出是:

valuebefore: A 
typebefore: string 
typeafter: string << the type didnt change to array! 
is not an array 
valueafter: A  << the value was not updated! 

为什么不能只是抱着新的阵列? 价值怎么样也没变?

编辑:

这里涉及其他变量的vardump:

echo var_dump(TL_MODE)." <br/>"; 
echo var_dump($_SESSION['REQUEST_TOKEN'])." <br/>"; 
echo var_dump($_SESSION['REQUEST_TOKEN'][TL_MODE])." <br/>"; 

输出:

string(2) "FE" 
string(32) "A96665c9f1e41d1745bf3a3d75cff33a" 
string(1) "A" 
+0

这里工作正常:valuebefore: typebefore:string typeafter:array valueafter:Array –

+0

它可能是一些PHP配置可能吗? – sapeish

+0

你可以尝试用普通的'数组'而不是'会话'做这个吗?看起来你的会议可能是问题。它也适用于我使用会话。 – ace

回答

0

@Brent Baisley在$ _SESSION ['REQUEST_TOKEN']不是数组,它是一个字符串,但基本问题原来是破坏$ _SESSION数据的cookie相关问题。

只要我清除cookie和网页浏览器缓存一切正常。

0

什么是TL_MODE的价值?如果你没有将其定义为一个常量,那么你只是添加数组项目。这将解释你所看到的行为。在最后输出数组,看看你有什么。下面的代码的

var_dump($_SESSION['REQUEST_TOKEN']); 
+0

我在上面的问题中添加了vardumps。谢谢。 – sapeish

+0

好像你的问题是$ _SESSION ['REQUEST_TOKEN']不是一个数组,它是一个字符串。所以你试图在一个字符串上添加/引用一个数组项。 –

0

输出附:

  • valuebefore:甲
  • typebefore:串
  • typeafter:阵列
  • valueafter:数组

你应该回声TL_MODE和$ _SESSION内容的值调试。

<?php 

    session_start(); 
    DEFINE('TL_MODE', 'tl_mode_constant'); 
    $_SESSION['REQUEST_TOKEN'][TL_MODE] = 'A'; 

    echo "valuebefore: ".$_SESSION['REQUEST_TOKEN'][TL_MODE] . '<br />'; 
    $_SESSION['REQUEST_TOKEN'][TL_MODE] = "somestring"; 

    echo "typebefore: ".gettype($_SESSION['REQUEST_TOKEN'][TL_MODE]) . '<br />'; 
    $_SESSION['REQUEST_TOKEN'][TL_MODE] = array(); 

    echo "typeafter: ".gettype($_SESSION['REQUEST_TOKEN'][TL_MODE]); 
    if (!is_array($_SESSION['REQUEST_TOKEN'][TL_MODE])){ 
     echo "is not an array" . '<br />'; 
    } 
    echo "valueafter: ".$_SESSION['REQUEST_TOKEN'][TL_MODE] . '<br />'; 

?> 
+0

我在上面的问题中添加了TL_MODE和$ _SESSION ['REQUEST_TOKEN']的vardump。谢谢。 – sapeish

0

这个小例子对我的作品:

$ php -r '$a="foo"; $a=array("bar"); var_dump($a);' 
array(1) { 
    [0]=> 
    string(3) "bar" 
} 

你var_dumps应表明:(1)$_SESSION['REQUEST_TOKEN']是一个数组,和(2)你的不变,TL_MODE是一个非空值。如果它为空,则$_SESSION['REQUEST_TOKEN'][TL_MODE]$_SESSION['REQUEST_TOKEN'][]相同,并且只在您认为要重新分配时添加数组元素。但是,如果$_SESSION['REQUEST_TOKEN']是一个字符串,那么如果它是一个数组,则不能添加下标。