Получение значений из вложенного массива - PullRequest
0 голосов
/ 28 февраля 2012

Используя API приложения, я могу получить данные в виде JSON и поместить их в массив.

$json = file_get_contents($url);
$obj = json_decode($json);
print_r($obj);

При печати массива я вижу:

stdClass Object(
    [metadataList] = > stdClass Object(
        [metadata] = > Array(
                [0] = > stdClass Object([metadataName] = > category [metadataValue] = > RECIPES)
                [1] = > stdClass Object([metadataName] = > title [metadataValue] = > Easy Sugar Cookies)
            )
        )
)

Мне нужно установить переменную, равную значению метаданных заголовка («Простые сахарные печенья»), но у меня возникли некоторые проблемы.

Вот где я до сих пор, но у меня нет никакихповезло выяснить, как указать конкретный ключ metadataValue, поскольку в массиве их больше одного.

$title = array_search('description',($obj->{'metadataList'}->{'metadata'}));

Ответы [ 4 ]

1 голос
/ 28 февраля 2012

Я думаю, что это вы хотите ...

$obj = json_decode($json, true);
$value = '';
  foreach($obj['metadataList']['metaData'] as $metadata) {
  if($metadata['metadataName'] === 'someName') {
    $value = $metadata['metadataValue'];
    break;
  }
   continue ;

}
0 голосов
/ 28 февраля 2012
foreach(($obj->{'metadataList'}->{'metadata'}) as $sub_object)
{
 if(($sub_object->{'metadataName'}) == "title")
  return ($sub_object->{'metadataName'}->{'metadataValue'});
}
0 голосов
/ 28 февраля 2012

с макушки головы

$originalValue = "";
foreach($obj->metadataList->metadata as $index=>$metadataInfo){
  if($metadataInfo->metadataName =="title"){
    $originalValue = $obj->metadataList->metadata[$index]->metadataValue;
    $obj->metadataList->metadata[$index]->metadataValue = "hi big boy";
  }
}
0 голосов
/ 28 февраля 2012

$obj->{'metadataList'}->{'metadata'} - это массив объектов , а не строк.Следовательно, array_search(string, array) не будет работать (кроме того факта, что в структуре массива / объекта нет строки description).

Я предлагаю вместо этого проанализировать данные как массив (объект работает нормально, какхорошо, хотя) и просто перебрать массив:

$obj = json_decode($json, true);
$value = '';
foreach($obj['metadataList']['metaData'] as $metadata) {
    if($metadata['metadataName'] === 'someName') {
        $value = $metadata['metadataValue'];
        break;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...