2014-03-30 3 views
2

이 stdClass 객체를 통해 어떻게 반복 할 수 있는지 알아 내려고합니다. 경로내용 배열 항목 [0] - [?]의 값을 얻으려고합니다.PHP stdClass 객체 배열 루핑

는 객체 배열은 다음과 같습니다

stdClass Object 
(
    [hash] => zzzzzzzzzzzzzzzzzzzzzzzzzzzz 
    [revision] => 22 
    [rev] => 161f5f4043 
    [thumb_exists] => 
    [bytes] => 0 
    [modified] => Sun, 23 Mar 2014 18:05:38 +0000 
    [path] => /Camera Uploads 
    [is_dir] => 1 
    [icon] => folder_photos 
    [root] => dropbox 
    [contents] => Array 
    (
     [0] => stdClass Object 
      (
       [revision] => 47 
       [rev] => 2f1f5f4043 
       [thumb_exists] => 1 
       [bytes] => 3212196 
       [modified] => Sun, 23 Mar 2014 18:07:05 +0000 
       [client_mtime] => Wed, 05 Feb 2014 19:10:14 +0000 
       [path] => /Camera Uploads/2014-02-05 14.10.13.jpg 
       [is_dir] => 
       [icon] => page_white_picture 
       [root] => dropbox 
       [mime_type] => image/jpeg 
       [size] => 3.1 MB 
      ) 

     [1] => stdClass Object 
      (
       etc etc... 

현재 내가 루프에 다음 코드를 시도하고있다 :

line 75: print_r ($dropbox->GetMetadata($file->path)); 

line 77: foreach ($dropbox->GetMetadata($file->path) as $arr) { 
line 78: foreach ($arr as $obj) { 
line 79:  $path = $obj->path; 
line 80:  echo $path; 
line 81: } 
line 82: } 

을하지만 난이 오류가 계속 :

(!) Warning: Invalid argument supplied for foreach() in 
       C:\wamp\www\test\sample.php on line 78 

Call Stack 

# Time  Memory  Function  Location 
1 0.0011  157592  {main}()  ..\sample.php:0 
+0

내부 foreach 루프 인'var_dump ($ arr);'만 제거하면 알 수 있습니다. Btw,'$ arr '은 오해하기 쉬운 변수 이름입니다. 객체의 속성을 반복 할 때'$ property' 여야합니다. – hek2mgl

+0

@ hek2mgl 그러면 ** 오류가 발생합니다.주의 : C : \ wamp \ www \ test \ sample.php의 비 객체 속성을 얻으려고합니다. line 78 ** – StealthRT

+0

다시 한번 생각해보십시오. 다시 시도해보십시오. 일단 당신이 계몽된다면 많이 말할 것이 없다는 것을 알게 될 것입니다. – hek2mgl

답변

0

시도를 다음 :

(210)
foreach($dropbox->GetMetadata($file->path) as $result){ //Process each value as $result 
if(is_array($result)){  //If $result is an array continue ('contents') 
foreach($result as $value){ //Process each value from $result (0..x) 
echo"{$value->path}\n"; //Echo what you are looking for ('contents'>'0'>'path') 
}}} 
+0

죄송합니다. – StealthRT

+0

OK,'echo'는'$ value'을 객체로 취급하지 않았습니다. 지금 해봐? – JBES

0

문제는 당신이 그것을 전체 보관 용 객체를 제공 라인 77에 foreach 문을 수행 할 때

Warning: Invalid argument supplied for foreach() in C:\wamp\www\test\sample.php on line 78

에 의해 명시된 바와 같이 foreach는, 배열이나 객체를받을 싶어합니다. 그런 다음 78 행에서 일반 오브젝트 특성 인 에 대해 foreach를 수행하지만 일반 오브젝트 (hash)의 첫 번째 키는 배열이 아니므로 오류가 발생합니다. 첫 번째 foreach에 적절한 내용을 제공하십시오 :

$object = $dropbox->GetMetadata($file->path); 
foreach ($object->contents as $arr) { 
    foreach ($arr as $obj) { 
    $path = $obj->path; 
    echo $path; 
    } 
}