2012-11-02 37 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,很好的地方。 –