2012-08-01 86 views
0

我遇到了一個存儲在會話變量中的數組的問題。當我嘗試對數組中的特定項目進行更改時,整個數組將被新值覆蓋。PHP會話數組被覆蓋

我的代碼如下:

<? session_start(); 

include '../../config/config.php'; 
include '../functions.php'; 

if ($user){    
    $type = str_replace("-", "_", ucwords(sanitize($_POST['type'], 'u'))); 
    $name = str_replace("-", "_", ucwords(sanitize($_POST['name'], 'u'))); 

    $price = sanitize($_POST['price'], 's');  
    $num = sanitize($_POST['num'], 's'); 
    preg_match_all('/[-+]?\b[0-9]+(\.[0-9]+)?\b/', $price, $result);                

    if ($num != ""){ 
     $num = explode("-", $num); 

     echo '<pre>'; 
      print_r($num); 
     echo '</pre>'; 

     echo '<br/>';  

     echo '<pre>'; 
      print_r($_SESSION['prodcontrolprices']); 
     echo '</pre>';    

     switch(count($num)){ 
      case 2:         
       $_SESSION['prodcontrolprices'][$num[0]][$name] = array("price"=>$price);        
       echo "1here"; 
       break; 
      case 3:                        
       $_SESSION['prodcontrolprices'][$num[0]][$num[1]]['subs'][$type][$name] = array("price"=>$price);     
       echo "2here"; 
       break; 
      case 4:     
       $_SESSION['prodcontrolprices'][$num[0]][$num[1]][$num[2]]['subs'][$type][$name] = array("price"=>$price); 
       echo "3here"; 
       break; 
      case 5:     
       $_SESSION['prodcontrolprices'][$num[0]][$num[1]]['subs'][$num[2]][$num[3]]['subs'][$type][$name] = array("price"=>$price); 
       echo "4here"; 
       break; 
     }   

     echo '<br/>'; 

     echo '<pre>'; 
      print_r($_SESSION['prodcontrolprices']);    
     echo '</pre>'; 


    }else{ 
     $_SESSION['prodcontrolprices'][$type][$name] = array("price"=>$price);   
    } 
} 

?> 

下面是從回波語句的輸出:值之前陣列

Array 
(
    [0] => Style 
    [1] => One_sided 
) 

內容被分配給它。

Array 
(
    [Style] => Array 
     (
      [One_sided] => Array 
       (
        [price] => 130.00 
        [subs] => Array 
         (
          [Quantity] => Array 
           (
            [500] => Array 
             (
              [price] => 10.00 
             ) 

            [1000] => Array 
             (
              [price] => 20.00 
             ) 
           ) 
         ) 
       ) 
     ) 
) 

將值分配給它後的數組內容。

Array 
(
    [Style] => Array 
     (
      [One_sided] => Array 
       (
        [price] => 230.00 
       ) 
     ) 
) 

回答

4

你的問題是,你是用一個新的更換整個子陣列(即只有一個元素):

$_SESSION['prodcontrolprices'][$type][$name] = array("price"=>$price); 

你應該做的,而不是被添加/只需更換其中一個值:

$_SESSION['prodcontrolprices'][$type][$name]['price'] = $price; 
+0

謝謝你不能相信我錯過了。盯着代碼太久了。 – Stephen 2012-08-01 10:00:36