如何在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.
我有以下代码来读取Json并将一些值存储到数组中: p> \ 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
]);
}
code> pre>
现在我需要在变量内部获取“control_id”和“nro_chart”之外的两个“控制”值。 p >
div>
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
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.
json_decode($json, true);
will transform your json string to an associative array. so now you can use : $item['provider_id'].
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,
),
)