一些会话变量返回旧值

时间:2015-05-31 01:27:29

标签: php arrays session

我使用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,然后我叫a.php?p_type = 2 lator, 然后新添加的项目编号1234到" a2"迷路了。数组中的值" a2"回到旧的价值观。 但是" a1"中的值没问题。

我检查了/ var / lib / php / session目录中的会话文件,发现所有结果都符合我的预期。 在我调用a.php?p_type = 1后,文件中的值与我预期的一样。 但是在a.php?p_type = 2之后,值会回到旧的值。

有趣的是,当我用不同的item_nums调用a.php?p_type = 2两次时, 阵列" a2"工作正常。

我不知道为什么会话中的某些值会回到旧值。 我应该在哪里开始调试..

任何建议都将受到赞赏..

1 个答案:

答案 0 :(得分:0)

我想你的问题是你没有阅读关于它的手册,没有粗鲁的意图,但它清楚地说,而不是你合并两个阵列可以发生,解释它的'为什么',因为我建议你完全阅读了这些东西,没有kittin,也有一些重叠的例子在手册的例子中解释,并解释如何避免/使用“问题”。

它textualy说:   “如果输入数组具有相同的字符串键,则该键的后一个值将覆盖前一个键。但是,如果数组包含数字键,则后面的值不会覆盖原始值,而是会附加。”

所以,可能你在两个$ _SESSION变量中使用相同的字符串值,或者两者都有相同的int来索引数据,我告诉你,看到$ _SESSION的创建是必要的,否则我不能看看你正在合并的那些数组的组成,因此,我不能建议一种方法来解决面向你的必要性的问题。

事实上,你并没有说,你正在合并两个$ _SESSION变量,但没有说明为什么这样做,并且从视角来看,其他人甚至不知道这是否是正确的方法你想要的。

无论如何,您的解决方案是阅读手册中的那部分内容。将代码发送到您的代码。

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

度过美好的一天