2

我有这个 PHP 脚本,它启动一个会话并创建它的变量。这是代码片段:

<?php
session_start();
if (!is_array($_SESSION['cart'])) $_SESSION['cart'] = array();
$id = 10;
$_SESSION['cart'][$id] = array( 'cod' => 'ABC', 'price' => '80', 'status' => 'active' );
header('Location: http://www.example.com/checkout.php');
?>

当我使用print_r输出 $_SESSION 数组时,我得到了这个:

Array (
    [cart] => Array (
        [136] => Array (
            [cod] => ABC
            [price] => 80
            [status] => active
        )
    )
)

这很好用:创建了用户会话,并且很好地设置了它的所有变量,然后用户被重定向到 que 结帐页面。

但是有一个问题:当用户到达结帐页面时,一切看起来都很好。查看代码片段:

<?php
session_start();
print_r($_SESSION);
?>

上面print_r的输出正是我们之前看到的:并且 Array 填充了其他 Array。伟大的!但这里开始了奇怪的部分:当我使用任何会话变量设置为另一个变量的值时,会话数据会丢失。一探究竟:

<?php
session_start();
print_r($_SESSION);
$cart = $_SESSION['cart'];
foreach ($cart as $key => $data) : // if I use foreach($_SESSION['cart'] as $key => $data) will be the same thing
    /*** Do stuff here ***/
endforeach;
?>

上面print_r的输出是:

Array (
    [cart] => Array (
        [cod] => ABC
        [price] => 80
        [status] => active
    )
)

事实上,如果我只是输出变量值而不在脚本中使用它们,一切都很好。但是,当我在脚本的某处使用变量时(即使在放置了print_r片段之后),会话变量也会丢失一些数据。

我试图序列化$_SESSION['cart']变量,但是每次我想获取它的值时反序列化它是非常烦人的。

谁能帮我?

4

1 回答 1

0

我认为在 foreach 中处理 Do Stuff Here 部分时存在问题,您可以在处理时检查:

foreach ($cart as $key => $data)
{
if(is_array($data)){}
}
于 2012-12-28T20:06:59.967 回答