Php 一些会话变量返回到旧值

Php 一些会话变量返回到旧值,php,arrays,session,Php,Arrays,Session,我使用centos 6.6、PHP5.3.4 我有一个在iframe中调用的php脚本(我们称之为a.php)。。 当它被称为a.php?p_type=1和item_num=1234时, 它将数组保存到会话中。 有时,它会在会话中合并两个数组并再次将其保存到会话中 但是合并不起作用。。 下面是简化的代码。 (为了简洁起见,我将隐藏次要细节) 首先,我调用了a.php?p_type=1和item_num=1234,然后我调用了a.php?p_type=2 lator, 然后,新添加到“a2”的项

我使用centos 6.6、PHP5.3.4

我有一个在iframe中调用的php脚本(我们称之为a.php)。。 当它被称为a.php?p_type=1和item_num=1234时, 它将数组保存到会话中。 有时,它会在会话中合并两个数组并再次将其保存到会话中 但是合并不起作用。。 下面是简化的代码。 (为了简洁起见,我将隐藏次要细节)

首先,我调用了a.php?p_type=1和item_num=1234,然后我调用了a.php?p_type=2 lator, 然后,新添加到“a2”的项目编号1234丢失。数组“a2”中的值返回到旧值。 但是“a1”中的值没有问题

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

有趣的是,当我使用不同的item_nums调用a.php?p_type=2两次时, 数组“a2”工作正常

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


如果您有任何建议,我们将不胜感激。

我想您的问题在于,您没有阅读手册中关于它的内容,没有粗鲁的意思,但它清楚地表明,当您合并两个可能发生的数组时,请解释它的“原因”,因为我建议您完全阅读这些内容,没有kittin,手册的示例部分也解释了一些重叠的示例,并解释了如何避免/使用该“问题”

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

因此,可能您在两个$\会话变量中使用了相同的字符串值,或者两个变量都有相同的int来索引数据,我告诉过您,必须查看$\会话的创建,否则我看不到正在合并的数组的组成,因此,我不能根据你的需要提出一种解决问题的方法

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

无论如何,您的解决方案是阅读手册的这一部分,并将其与您的代码关联起来


祝您度过愉快的一天

在什么时候定义´$\\会话[$ses\u var]´请也显示该脚本,也在这一行$some\u array[]=$\\获取[“item\u num”];将“some_array[]”更改为“$some_array()”,因为“[]”用于调用索引器中的特定位置,“()”另一方面,自动对其排序,这似乎就是您在这里尝试做的(至少在代码的这一部分)。这是用于解释的简化代码,因为实际代码非常长。上面的代码,$\u SESSION[$sess\u var]在if子句中定义。这样,很久以来就没有问题了。数组中的[]表示下一个新索引。我想这也没问题。这是一个没有问题的旧代码。但我现在必须在会话中合并两个数组。这就是问题所在
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);
}