У меня есть следующий код для чтения Json и сохранения некоторых значений в массиве:
<?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
]);
}
Теперь мне нужно получить два значения, которые находятся вне «control», например, «provider_id» и «nro_chart» внутри переменной.
JSON содержит массив из одного элемента, поэтому для доступа provider_id
а также nro_chart
, получите первый элемент и получите прямой доступ к свойствам:
$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
Или в том же самом foreach
цикл:
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);
}
}
Обязательно проверьте, установлено ли свойство для этого элемента с помощью isset()
первый.
json_decode($json, true);
преобразует вашу строку JSON в ассоциативный массив.
так что теперь вы можете использовать: $ item [‘provider_id’].
Вот способ изменить массив и объявить две дополнительные переменные с менее повторяющимися функциями.
Код: (демонстрация)
$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\n"; // display integer value
echo "nro_chart = $nro_chart\n"; // display integer value
var_export($array); // display updated array
Выход:
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,
),
)