2012-02-28 4 views
0

응용 프로그램의 API를 사용하여 데이터를 JSON으로 검색하고 배열에 넣을 수 있습니다.중첩 된 배열에서 값 가져 오기

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

내가 제목 메타 데이터 값 ("쉬운 설탕 쿠키")에 대한 변수를 동일하게 설정해야합니다,하지만 몇 가지 문제가 있습니다 : 내가 배열을 인쇄 할 때

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

, 나는 참조 .

여기까지 지금까지 내가 어디에 있는지 알 수 있지만 특정 metadataValue 키를 지정하는 방법을 알아 내려고하지는 않습니다. 배열에 하나 이상의 문자가 있기 때문입니다.

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

내가 잘못하지 않았다면,'array_search'는 그 문자열이 Object에 있기 때문에 당신을 도울 수 없습니다. –

+0

제목 값을 얻으시겠습니까? – xdazz

+0

그럼 그 값을 원하니? .. 아니면 제목이 될만한 모든 가치가 필요합니까? '$를 OBJ> metadataList-> 메타 [1] -> metadataValue' (직접) 또는 (비싼) '의 foreach (메타 $로서 $를 OBJ> metadataList-> 메타) { \t if ($ meta-> metadatavalue == ... } ' – Gavin

답변

1

나는 이것이 당신이 원하는 것 같아요 ...

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

} 
+1

'continue' 문은 불필요합니다. –

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

관련 문제