0

セッション変数に格納している配列に問題があります。配列内の特定の項目に変更を加えようとすると、配列全体が新しい値で上書きされます。

私のコードは次のとおりです。

<? 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);          
    }
}

?>

以下は、echoステートメントからの出力です。

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

1 に答える 1

4

あなたの問題は、サブ配列全体を新しいもの(要素が1つしかない)に置き換えていることです:

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

代わりにすべきことは、その中の値を 1 つだけ追加/置換することです。

$_SESSION['prodcontrolprices'][$type][$name]['price'] = $price;
于 2012-08-01T09:56:17.350 に答える