2012-02-28 115 views
0

使用应用程序的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'})); 
+0

如果我没有弄错,'array_search'不会帮助你,因为那个字符串在一个对象中。 – 2012-02-28 14:56:55

+0

你的意思是获得标题价值? – xdazz 2012-02-28 14:57:58

+0

所以你想要那个价值? ..或者你是否需要所有可能是标题的值? '$ obj-> metadataList->元数据[1] - > metadataValue'(直接) 或(昂贵的) '的foreach($ obj-> metadataList->元数据作为$甲基) { \t if($ meta-> metadatavalue == ... }' – Gavin 2012-02-28 15:02:31

回答

1

我想这是你想要的...

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

} 
+1

'continue'语句是多余的。 – 2012-02-28 15:35:47

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; 
    } 
} 
0
foreach(($obj->{'metadataList'}->{'metadata'}) as $sub_object) 
{ 
if(($sub_object->{'metadataName'}) == "title") 
    return ($sub_object->{'metadataName'}->{'metadataValue'}); 
} 
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"; 
    } 
} 
+0

如果您在控制对象的输出,那么将元数据设为关联数组,然后您可以将其引用为 $ title = $ obj-> metadataList - > metadata [“title”]; – IrishAdo 2012-02-28 15:02:48