【问题标题】:Search through the Sessions Variable Array and update搜索 Sessions 变量数组并更新
【发布时间】:2012-11-03 05:42:08
【问题描述】:

我正在使用此代码输出所有注册的会话变量 -

 echo "<pre>";
 print_r($_SESSION);
 echo "</pre>";
 exit();

这就是我得到的

Array
 (
[language] => english
[navigation] => navigationHistory Object
    (
        [path] => Array
            (
                [0] => Array
                    (
                        [get] => Array
                            (
                            )

                        [post] => Array
                            (
                            )

                    )

                [1] => Array
                    (

                        [get] => Array
                            (
                            )

                        [post] => Array
                            (

                                [cart_number] => XXXXXXXXXXXX
                                [x] => 62

                            )
                )


            )

        )
 )

我想将会话数组中的 cart_number 变量从 XXXXXXXX... 更新为 555555。我试过了

$_SESSION['navigation']->path[1]['post']['cart_number'] = 5555555

这可行,但问题是,cart_number 变量并不总是在 [1] => 数组。它可以在 [2] 或 [3] 或其他任何地方。

所以我的问题是,我是否可以通过会话数组搜索该特定变量并使用正确的值对其进行更新?谢谢。

【问题讨论】:

  • 我很难理解为什么你会这样做。如果购物车编号是您需要在会话中保留的重要值,为什么不在需要更新时将其设置为$_SESSION['cart_number']。尝试对导航历史进行大量解析以更改此值似乎很奇怪。
  • 嗨@MikeBrant,我正在处理一个购物车,它使用这个逻辑来做所有事情,数组比这个长得多,我把它去掉只是为了说明一点。因此,改变函数的行为方式比仅仅搜索和更新更加复杂和耗时。无论如何,谢谢。

标签: php arrays session variables


【解决方案1】:

简单方法是使用foreach 循环遍历navigationHistory 对象,直到找到['post']['cart_number'](假设只有1 个)。

伪代码

foreach ($_SESSION['navigation']->path as $navObj) {
    if (isset($navObj['post']['cart_number'])) {
        // update...
        break;
    }
}

一种更面向对象的方法可能是存在于navigationHistory 中的方法来更新cart_number 或搜索堆栈,例如find()

【讨论】:

  • 从提供的 print_r 中我只看到 1 个 navigationHistory 对象和很多 navigationHistory->path
【解决方案2】:

你可以这样设置..

foreach($_SESSION['navigation']->path as $key=>$val){
   if(isset($val['post']['cart_number'])) {
      $_SESSION['navigation']->path[$key]['post']['cart_number'] = 5555555;
   }
}

这将覆盖所有已设置的购物车号码

【讨论】:

  • 谢谢你,像魅力一样工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-13
  • 1970-01-01
  • 2021-01-22
  • 2015-04-13
相关资源
最近更新 更多