2012-10-26 49 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']是一個字符串,那麼如果它是一個數組,則不能添加下標。