49991


あるショッピングカートのphpファイルで下記の様に、var_dump($_SESSION);を試すと、その右側の結果が表示されます。  
その表示された中のproduct_idである1322を$_SESSIONで取得するにはどのような設定にすべきかご教授頂けませんでしょうか。

var_dump($_SESSION); -> array(11) { ["cart"]=> array(1) { [1]=> array(3) {
[1]=> array(7) { ["id"]=> string(4) "1260" ["quantity"]=> int(4) ["cart_no"]=>
int(1) ["productsClass"]=> array(15) { ["product_id"]=> string(4) "1322"
["stock"]=> NULL ["stock_unlimited"]=> string(1) "1" ["sale_limit"]=>
string(2) "88" ["price02"]=> string(1) "1" ["point_rate"]=> string(1) "5"
["product_code"]=> string(2) "99" ["product_class_id"]=> string(4) "1260"
["classcategory_name1"]=> NULL ["class_name1"]=> NULL
["classcategory_name2"]=> NULL ["class_name2"]=> NULL ["main_image"]=> NULL
["name"]=> string(2) "kk" ["main_list_image"]=>
string(26)"09241340_5ba86ada23ca6.jpg" } ["price"]=> string(1) "1"
["point_rate"]=> string(1) "5" ["total_inctax"]=> float(4) }
["cancel_purchase"]=> bool(false) [0]=> array(4) { ["price"]=> string(0) ""
["quantity"]=> string(0) "" ["point_rate"]=> string(0) "" ["id"]=> array(1) {
[0]=> string(0) "" } } } } ..........

以下はいろいろと試した結果です。

var_dump($_SESSION['cart']); -> 上記の["cart"]=>以降が表示されます。  
var_dump($_SESSION['product_id']); -> NULL  
var_dump($_SESSION['cart']['product_id']); -> NULL


CC BY-SA 4.0
2018-11-05T17:14:07.080
49990
2018-11-05T17:39:37.963
19211
question
php session
多次元配列内での$_SESSIONの使用方法


# ご質問への回答

該当の `var_dump()` のログを観察すると、  
大まかに  
`["キー名"]=> 型の名前 中身の値`  
という並びになっています。このルールで、試しに手で内容を解釈すると、  
以下のようにインデントを掛けることができました。

[code]

    array(11) {
        ["cart"]=> array(1) {
            [1]=> array(3) {
                [1]=> array(7) {
                    ["id"]=> string(4) "1260"
                    ["quantity"]=> int(4)
                    ["cart_no"]=> int(1)
                    ["productsClass"]=> array(15) {
                        ["product_id"]=> string(4)"1322"
                        ["stock"]=> NULL
                        ["stock_unlimited"]=> string(1) "1"
                        ["sale_limit"]=> string(2) "88"
                        ["price02"]=> string(1) "1"
                        ["point_rate"]=> string(1) "5"
                        ["product_code"]=> string(2) "99"
                        ["product_class_id"]=> string(4) "1260"
                        ["classcategory_name1"]=> NULL
                        ["class_name1"]=> NULL
                        ["classcategory_name2"]=> NULL
                        ["class_name2"]=> NULL
                        ["main_image"]=> NULL
                        ["name"]=> string(2) "kk"
                        ["main_list_image"]=> string(26)"09241340_5ba86ada23ca6.jpg"
                    }
                    ["price"]=> string(1) "1"
                    ["point_rate"]=> string(1) "5"
                    ["total_inctax"]=> float(4)
                }
                ["cancel_purchase"]=> bool(false)
                [0]=> array(4) {
                    ["price"]=> string(0) ""
                    ["quantity"]=> string(0) ""
                    ["point_rate"]=> string(0) ""
                    ["id"]=> array(1) {
                        [0]=> string(0) ""
                    }
                }
            }
        }
        :
    
[/code]

ここから読み取れるのは、

  1. `$_SESSION` は11個の要素を持つ配列である
  2. ツリー構造になっている
  3. ツリーを辿ると `$_SESSION["cart"][1][1]["productsClass"]["product_id"]` に `"1322"` が入っている

といったあたりです。  
(少しcartの直下の構造が奇妙な気がしますが、このログからはこのように読み取れます)

# 気になった点

2つほど気になった点があります。

## `$_SESSION` 登録側コードとの一貫性

`$_SESSION` そのものを発行するコードをお作りになられたのも質問者さんでしょうか……？  
`$_SESSION` にデータを仕掛ける側のコードを調べ、そちらと仕様を合わせたほうがいいかもしれません。

## `var_dump()` の利用

有効なPHPコードの形でデータを出力する `var_export()` や  
よく知られたフォーマットである `json_encode()` 等によって変換した文字列を出すと、  
`var_dump()` より、情報を読み取りやすいかもしれません。次に出力するときに試してみるとよいかも。


CC BY-SA 4.0
2018-11-05T17:39:37.963
49991
2018-11-05T17:39:37.963
30827
49990
answer