dongzi1209
2018-02-17 21:53
浏览 708

如何在php中读取多级json的值?

I have the following code to read a Json and store some values into an array:

<?php
$json = '[{
        "provider_id":1,
        "nro_chart":1,
        "control": {
            "color": "blue",
            "total_value": 21.5,
            "car_id": 421118
        }
    },
    {
        "control": {
            "color": "green",
            "total_value": 25,
            "car_id": 421119
        }
    },
    {
        "control": {
            "color": "red",
            "total_value": 18,
            "car_id": 421519
        }
    }
]';

$j = json_decode($data);
$result = [];
foreach ($j as $item) {
    array_push($result,[
        'total_value' => $item->control->total_value,
        'car_id' => $item->control->car_id
    ]);
}

Now I need to get the two values that are outside of "control" like "provider_id" and "nro_chart" inside a variable.

图片转代码服务由CSDN问答提供 功能建议

我有以下代码来读取Json并将一些值存储到数组中: \ n

 &lt;?php 
 $ json ='[{
“”provider_id“:1,
”nro_chart“:1,
”control“:{
”color“:”blue  “,
”total_value“:21.5,
”n“car_id”:421118 
} 
},
 {
“control”:{
“color”:“green”,
“total_value”:  25,
“car_id”:421119 
} 
},
 {
“control”:{
“color”:“red”,
“total_value”:18,
“car_id”:  421519 
} 
} 
]'; 
 
 $ j = json_decode($ data); 
 $ result = []; 
foreach($ j as $ item){
 array_push($ result,  [
'total_value'=&gt; $ item-&gt; control-&gt; total_value,
'car_id'=&gt; $ item-&gt; control-&gt; car_id 
]); 
} 
   
 
 

现在我需要在变量内部获取“control_id”和“nro_chart”之外的两个“控制”值。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • duanjiuhong5843 2018-02-17 21:58
    已采纳

    The JSON contains an array of one element, so to access provider_id and nro_chart, get the first element and directly access the properties:

    $j = json_decode($json);
    var_dump($j[0]->provider_id); // /Applications/MAMP/htdocs/trello/up.php:28:int 1
    var_dump($j[0]->nro_chart); // /Applications/MAMP/htdocs/trello/up.php:28:int 1
    

    Demo

    Or, within that same foreach loop:

    foreach ($j as $item) {
        array_push($result,[
            'total_value' => $item->control->total_value,
            'car_id' => $item->control->car_id
        ]);
        if (isset($item->provider_id)) {
            var_dump($item->provider_id);
        }
        if (isset($item->nro_chart)) {
            var_dump($item->nro_chart);
        }
    }
    

    Be sure to check if the property is set for that element with isset() first.

    点赞 评论
  • dongzhuo6137 2018-02-17 22:04
    json_decode($json, true);
    

    will transform your json string to an associative array. so now you can use : $item['provider_id'].

    点赞 评论
  • dongquechan4414 2018-02-18 08:55

    Here is a way to modify the array and declare the two extra variables with less iterated functions.

    Code: (Demo)

    $array = json_decode($json,true);  // decode as array because that is what you are generating in the result
    
    $provider_id=$array[0]['provider_id'];
    $nro_chart=$array[0]['nro_chart'];
    
    foreach($array as $index=>&$subarray){  // modify $subarray by reference
        $subarray=['total_value'=>$subarray['control']['total_value'],'car_id'=>$subarray['control']['car_id']];  // overwrite each subarray using the first two elements from deeper "control" subarray
    }
    
    echo "provider_id = $provider_id
    ";  // display integer value
    echo "nro_chart = $nro_chart
    ";      // display integer value
    var_export($array);                   // display updated array
    

    Output:

    provider_id = 1
    nro_chart = 1
    array (
      0 => 
      array (
        'total_value' => 21.5,
        'car_id' => 421118,
      ),
      1 => 
      array (
        'total_value' => 25,
        'car_id' => 421119,
      ),
      2 => 
      array (
        'total_value' => 18,
        'car_id' => 421519,
      ),
    )
    
    点赞 评论

相关推荐 更多相似问题