2015-05-31 30 views
0

我用的CentOS 6.6,PHP 5.3.4一些會話變量下的變回原來的值

我有一個名爲的iframe PHP腳本(我們稱之爲a.php只會).. 當它被稱爲a.php?p_type = 1 & item_num = 1234, 它將數組保存到會話中。 有時,它合併會話中的兩個數組並重新保存到會話 但合併不起作用。 這裏是簡化的代碼。 (我將隱藏爲了簡潔次要的細節)

header('P3P: CP="CAO PSA OUR"'); 
session_start(); 

$p_type_val = $_GET["p_type"]; 
$sess_var = "a".$p_type_val; 
$some_array = $_SESSION[$sess_var]; 
if(isset($_GET["item_num"]) 
{ 
    $some_array[] = $_GET["item_num"]; 
    $_SESSION[$sess_var] = $some_array; 
} 

if($p_type_val == 1) // when p_type is 1, merge two arrays in the session. 
{ 
    $sess_var2 = "a"."2"; 

    $some_array2 = $_SESSION[$sess_var2]; 

    $_SESSION[$sess_var2] = array_merge($some_array,$some_array2); 
} 

else if($p_type_val == 2) 
{ 
    $some_array2 = $_SESSION["p2"]; 
    print_r($some_array2); 
} 

.........

首先,我稱爲a.php只會?P_TYPE = 1 & item_num = 1234,那麼我稱爲.php?p_type = 2 lator, ,則新添加的項目編號1234到「a2」將丟失。數組「a2」中的值返回到舊值。 但「a1」中的值是沒有問題的。

我檢查了/ var/lib/php/session目錄中的會話文件,發現所有結果都符合我的預期。 我調用a.php?p_type = 1後,文件中的值與我預期的一樣。 但在a.php之後?p_type = 2,這些值會回到原來的值。

有趣的是,當我打電話給a.php?p_type = 2兩次與不同的item_nums, 數組「a2」工作正常。

我不知道爲什麼會話中的某些值會回到原來的值。 我應該在哪裏開始調試這個..

任何建議,將不勝感激..

+0

在您定義的「$ _SESSION [$ ses_var]」請出示該腳本也一樣,也是在這一行$ some_array [] = $ _GET [「item_num什麼時刻「];爲'$ some_array()'改變'some_array []',因爲'[]'用於調用索引器中的特定位置,另一方面調用'()',自動對它進行排序,這似乎是你正試圖在這裏做(至少在這部分代碼中)。 – user57129

+0

它是簡化的解釋代碼,因爲真正的代碼很長。和上面的代碼,$ _SESSION [$ sess_var]在if子句中定義。這樣,很長一段時間沒有問題了。而數組中的[]意味着最後一個下一個新索引。我認爲這也沒有問題。這是一個沒有問題的舊代碼。但我現在必須在會話中合併兩個數組。這就是問題出現的地方 –

回答

0

我想你的問題是你不看手冊吧,不粗魯意,但它顯然比時說,有你會合並兩個可能發生的數組,並解釋它的'whys',因爲我建議你完全閱讀這些東西,沒有kittin,在手冊的例子部分也有一些重疊的例子,並解釋避免/使用那個「問題」。

它textualy說: 「如果輸入數組具有相同的字符串鍵,然後該鍵的更高版本將覆蓋前一個鍵,但是,如果數組包含數字鍵,後面的值不會覆蓋原始價值,但將被追加。「

所以,你可能在兩個$ _SESSION變量中使用了相同的字符串值,或者它們都有相同的int來索引數據,我告訴過你,需要創建$ _SESSION是必須的,否則我不能看到你正在合併的數組的組成,因此,我不能提出一種方法來解決面向你的必要性的問題。

實際上,你並不是說,你正在合併兩個$ _SESSION變量,但不是說爲什麼會這樣做,並且從其角度來看,其他人甚至不知道這是否是正確的方法你想要什麼。

無論如何,您的解決方案是閱讀手冊&的那部分代碼。

http://php.net/manual/en/function.array-merge.php

有一個好的一天