2012-12-20 38 views
1

我有一個2陣列:不能確認的變量存儲在陣列

$arr1 = array($_SESSION['a'], $_SESSION['b']); 
$arr2 = array("1", "2"); 

我用這個代碼爲工作:

extract(array_combine($arr1, $arr2)); 

輸出將是:

$_SESSION['a'] = 1; 
$_SESSION['b'] = 2; 

當我將它存儲到另一個數組,這是輸出的值:

$_SESSION['abcd'] = array($_SESSION['a'], $_SESSION['b']); 

當我運行它的輸出告訴我,

Unidentified a 
Unidentified b 
+1

換句話說'var_dump($ _ SESSION);'前面。其他一切都會有很多猜測。 – hakre

+0

你可以發佈更多的代碼,它不清楚你是如何進入未定義的問題。 – PhearOfRayne

+0

'$ _SESSION ['a']'和'b'是數組? –

回答

0

當您使用此array_combine,這要求$_SESSION['a']$_SESSION['b']具有值。在訪問$_SESSION之前,您還需要進行會話;

$arr1 = array($_SESSION['a'], $_SESSION['b']); 
$arr2 = array("1", "2"); 

比方說,你有:

session_start(); 
$_SESSION['a'] = 'keya'; 
$_SESSION['b'] = 'keyb'; 
$arr1 = array($_SESSION['a'], $_SESSION['b']); 
$arr2 = array("1", "2"); 
extract(array_combine($arr1, $arr2)); 
// array_combine will return 
// Array 
// (
//  [keya] => 1 
//  [keyb] => 2 
//) 
// then running extract on this array will produce 
echo $keya; // "1" 
echo $keyb; // "2" 

所以,當你在另一個會話變量的存儲,它應該是這樣的

$_SESSION['abcd'] = array($keya, $keyb); 
+0

$ _SESSION如何必須有一個值存儲?提取(array_combine($ arr1,$ arr2));將輸出值$ _SESSION ['a'] = 1; $ _SESSION ['b'] = 2;但是當我將它存儲在$ _SESSION ['abcd']上時,它表示未識別a和b。 – KingDoppel

0

值越來越assigned.I didnt面對任何problem.try這

session_start(); 
$_SESSION['a']=a; 
$_SESSION['b']=b;' 
$arr1 = array($_SESSION['a'], $_SESSION['b']); 
$arr2 = array(1,2); 
extract(array_combine($arr1, $arr2)); 
echo $_SESSION['a']."<br/>"; 
echo $_SESSION['b']."<br/>"; 
$_SESSION['abcd'] = array($_SESSION['a'], $_SESSION['b']); 
echo $_SESSION['abcd'][0]."<br/>"; 
echo $_SESSION['abcd'][1]."<br/>"; 
+0

我剛編輯你的答案,看格式? – hakre

+0

你做錯了,因爲你分配了$ _SESSION ['a']&$ _SESSION ['b'] – KingDoppel

+0

我的期望是$ arr1 = array($ _ SESSION ['a'],$ _SESSION ['b']); $ arr2 = array(「1」,「2」);使用extract和array_combine它會變成$ arr1將是一個變量,$ arr2將會是變量$ arr1的值,當我將它賦值給$ _SESSION ['abcd'] = array($ _ SESSION ['a']] ,$ _SESSION ['b']);它說a和b的不明變量。 – KingDoppel

0

現在我明白了(我燒燬它帶我這麼久)。

array combine作品如何@ace說。

它從arr1的值(因此''和'',因爲它們不被設置在任何地方,即$_SESSION['a'] = '' && $_SESSION['b'] = ''),然後從arr2(so'1'和'1 ')意味着你的組合陣列將是array('' => 2)(由於被覆蓋)。

values of array1 supplies keys

values of array2 supplies values

這就意味着,被提取的變數在技術上是$(如在「」的名字,但很明顯,這不是一個有效的變量)。

如果你已經設置$_SESSION['a'] = 'aaa'; $_SESSION['b'] = 'bbb';,然後用$_SESSION['abcd'] = array($aaa, $bbb);而不是$_SESSION['abcd'] = array($_SESSION['a'], $_SESSION['b']);那麼它的作品。

http://codepad.org/xH9tEwxR

+0

謝謝現在我明白Qoop – KingDoppel

0

你錯過session_start()在頂部。在此之前,您無法使用$_SESSION

0
array($_SESSION['a'], $_SESSION['b']) 

這使得與值無論$_SESSION['a']$_SESSION['b']在這個時候一個新的數組。我們假設他們沒有設置,因此null。結果是array(null, null)

變量是的佔位符。這裏使用,而不是變量本身。

extract(array_combine($arr1, $arr2)); 

輸出將是:

$_SESSION['a'] = 1; 
$_SESSION['b'] = 2; 

這個假設簡直是公然錯誤的,因此你停落在它的其他假設不工作要麼。