2012-11-02 35 views
0

我使用此代码输出的所有已注册的会话变量 -搜索通过会话变量数组和更新

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 

          ) 
       ) 


      ) 

     ) 
) 

我想将Session Number中的变量cart_number从XXXXXXXX ...更改为555555.我试过

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

这工作和全部,但问题是,在cart_number变量并不总是在 [1] =>数组。它可以是[2]或[3]或其他。

所以我的问题是,无论如何,我可以通过会话数组搜索该特定变量并使用正确的值更新它?谢谢。

+0

我努力理解你为什么会这样做事的所有cart_numbers。如果购物车号码是您需要保留在会话中的重要值,为什么不在$ _SESSION ['cart_number']'设置它需要更新。为了改变这个值,试图通过你的导航历史来解析一系列的旋转看起来很奇怪。 –

+0

HI @MikeBrant,我正在处理一个购物车,它使用这个逻辑来完成所有的事情,这个数组比这个长得多,我剥夺了它仅仅是为了说明问题。所以要改变功能的行为比搜索和更新更加复杂和时间要求更高。不管怎么说,多谢拉。 –

回答

0

你可以将它设置这样..

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

这将覆盖这些设置

+0

谢谢,作品像魅力。 –

1

简单的办法是在navigationHistory对象使用foreach循环,直到你找到['post']['cart_number'](假设仅有1)。

伪代码

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

更OO办法可以是存在于navigationHistory更新cart_number或查询的堆,如find()的方法。

+0

从提供的print_r我只看到1个导航历史对象和很多导航历史记录 - >路径的 – Svetoslav

+0

@Svetlio,很好的地方。 –