从嵌套数组中检索值

时间:2012-02-28 14:51:24

标签: php multidimensional-array

使用应用程序的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)
            )
        )
)

我需要设置一个等于标题元数据值的变量(“Easy Sugar Cookies”),但我遇到了一些麻烦。

这是我到目前为止所处的位置,但我没有任何关于如何指定特定metadataValue键的运气,因为数组中有多个键。

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

4 个答案:

答案 0 :(得分:1)

我认为这是你想要的......

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

}

答案 1 :(得分:0)

$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;
    }
}

答案 2 :(得分:0)

foreach(($obj->{'metadataList'}->{'metadata'}) as $sub_object)
{
 if(($sub_object->{'metadataName'}) == "title")
  return ($sub_object->{'metadataName'}->{'metadataValue'});
}

答案 3 :(得分:0)

脱离我的头顶

$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";
  }
}