Манипулирование JSON Array Find Value в массиве

У меня есть массив JSON, который входит через API. Я хочу распечатать данные, однако возвращаемые значения не всегда находятся в одном и том же месте для каждого элемента. Ниже приведен пример возвращаемого JSON — это только одна часть JSON, это большой файл:

"standardSpecification": [
{
"Technical": [
{
"id": 13501,
"name": "Performance",
"description": "XXXXX",
"value": "standard",
"items": [
{
"id": 13502,
"name": "maximum speed (km/h)",
"value": 169
},
{
"id": 13503,
"name": "acceleration 0-62mph (s)",
"value": 12.2
},
{
"id": 113502,
"name": "maximum speed (mph)",
"value": 105
}
]
},

Я не могу использовать такие вещи, как, манипулировать им, потому что для одного элемента это может быть правильным, а не для другого:

echo $tech_array['standardSpecification'][5]['Technical'][11]['items'][8]['value'];

Есть ли способ найти «Производительность», а затем распечатать все элементы, связанные с этим? Я знаю, что могу использовать in_array () и array_search (), но не могу понять, как вернуть элементы.

Возможно, это простое решение, поэтому я надеюсь, что кто-то может помочь скрещенные пальцы.

0

Решение

Я думаю, что этот код будет делать то, что вы хотите. У него есть небольшая рекурсивная функция, которая ищет в массиве объект со свойством name знак равно Performance и возвращает этот узел. Затем вы можете просто извлечь items свойство из этого узла.

$arr = json_decode($json, true);
// look for the array element which is 'name' => 'Performance'
function search($arr, $key, $value) {
foreach ($arr as $k => $v) {
if (is_array($v)) {
if (($a = search($v, $key, $value)) !== false)
return $a;
continue;
}
if ($k == $key && $v == $value) return $arr;
}
// not found, return false
return false;
}

if (($node = search($arr, 'name', 'Performance')) !== false) {
$items = $node['items'];
print_r($items);
}

Вывод для предоставленных вами образцов данных:

Array
(
[0] => Array
(
[id] => 13502
[name] => maximum speed (km/h)
[value] => 169
)
[1] => Array
(
[id] => 13503
[name] => acceleration 0-62mph (s)
[value] => 12.2
)
[2] => Array
(
[id] => 113502
[name] => maximum speed (mph)
[value] => 105
)
)
0

Другие решения

В этом случае попробуйте следующий код:

<?php
$json = "";//you json api response
$jsonArray = json_decode($json,true);
foreach($jsonArray['standardSpecification'] as $spec){
foreach($spec['Technical'] as $technical){
echo "Performance: ".$technical['name'];
}
}
?>
0

По вопросам рекламы [email protected]