Php 搜索会话变量数组并更新

Php 搜索会话变量数组并更新,php,arrays,session,variables,Php,Arrays,Session,Variables,我正在使用此代码输出所有已注册的会话变量- echo "<pre>"; print_r($_SESSION); echo "</pre>"; exit(); 我想从XXXXXXXX更新会话数组中的购物车编号变量。。。到555555。我试过了 foreach ($_SESSION['navigation']->path as $navObj) { if (isset($navObj['post']['cart_number'])) {

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

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

我想从XXXXXXXX更新会话数组中的购物车编号变量。。。到555555。我试过了

foreach ($_SESSION['navigation']->path as $navObj) {
    if (isset($navObj['post']['cart_number'])) {
        // update...
        break;
    }
}
这是可行的,但问题是,cart\u number变量并不总是在 [1] =>阵列。它可以在[2]或[3]或任何形式

所以我的问题是,我是否可以在会话数组中搜索特定变量,并用正确的值更新它?谢谢。

最简单的方法是使用
foreach
navigationHistory
对象上循环,直到找到
['post']['cart\u number']
(假设只有1个)

伪代码

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

更面向对象的方法可以是
navigationHistory
中存在的一种方法,用于更新
购物车编号
或搜索堆栈,如
find()

您可以这样设置


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

我很难理解您为什么要这样做。如果购物车编号是您需要在会话中保留的重要值,为什么不在需要更新时将其设置为
$\u session['cart\u number']
。试图通过对导航历史进行一系列旋转的解析来改变这个值似乎很奇怪。嗨@MikeBrant,我正在处理一个购物车,它使用这个逻辑来做所有事情,数组比这个长,我把它去掉只是为了说明一点。因此,改变函数的行为方式比仅仅搜索和更新更为复杂和耗时。不管怎样,谢谢。从提供的打印文件中,我只看到1个navigationHistory对象,还有很多navigationHistory->path的谢谢,效果非常好。
foreach ($_SESSION['navigation']->path as $navObj) {
    if (isset($navObj['post']['cart_number'])) {
        // update...
        break;
    }
}
foreach($_SESSION['navigation']->path as $key=>$val){
   if(isset($val['post']['cart_number'])) {
      $_SESSION['navigation']->path[$key]['post']['cart_number'] = 5555555;
   }
}