Get data from an array of stdClass object

SinSync picture SinSync · Mar 26, 2014 · Viewed 7.6k times · Source

I'm trying to retrieve the value of the field from the Vimeo Api, I've tried all possible solutions mentioned here. Can someone tell me how to retrieve the thumnail and url from the thumbnails and urls object respectively?

array(1) {
    [0]=>       
        stdClass Object (
            [allow_adds] => 1
            [embed_privacy] => anywhere
            [id] => 123456789
            [is_hd] => 0
            [is_transcoding] => 0
            [license] => 0
            [privacy] => anybody
            [title] => Soap Opera
            [description] => 
            [upload_date] => 2014-02-20 03:03:50
            [modified_date] => 2014-02-20 19:06:05
            [number_of_plays] => 1
            [number_of_likes] => 0
            [number_of_comments] => 0
            [width] => 600
            [height] => 480
            [duration] => 32
            [owner] => stdClass Object (
                [display_name] => blah
                [id] => 12345678
                [is_plus] => 0
                [is_pro] => 1
                [is_staff] => 0
                [profileurl] => http://vimeo.com/st
                [realname] => ST
                [username] => ST
                [videosurl] => http://vimeo.com/st/videos
                [portraits] => stdClass Object (
                    [portrait] => Array (
                        [0] => stdClass Object (
                            [height] => 30
                            [width] => 30
                            [_content] => http://b.vimeocdn.com/x.jpg
                        )

                        [1] => stdClass Object (
                            [height] => 75
                            [width] => 75
                            [_content] => http://b.vimeocdn.com/x.jpg
                        )

                        [2] => stdClass Object (
                            [height] => 100
                            [width] => 100
                            [_content] => http://b.vimeocdn.com/x.jpg
                        )

                        [3] => stdClass Object (
                            [height] => 300
                            [width] => 300
                            [_content] => http://b.vimeocdn.com/x.jpg
                        )

                    )

                )

            )

            [urls] => stdClass Object (
                [url] => Array (
                    [0] => stdClass Object (
                        [type] => video
                        [_content] => http://vimeo.com/0000
                    )
                )
            )

        [thumbnails] => stdClass Object (
            [thumbnail] => Array (
                [0] => stdClass Object (
                    [height] => 75
                    [width] => 100
                    [_content] => http://b.vimeocdn.com/x.jpg
                )
            )
        )
    )

I have an array $vids which has the meta info of various vids along with another call inside the loop which fetches the second array $vidInfo containing the array displayed above for each entry. I can retrieve the title etc just like I would access an object normally. but I can't traverse any further the response above.

<?php 
     $vids = $videos->videos->video;    
         foreach ($vids as $vid){
             $id = $vid->id;
             $vidInfo = $vimeo->call('vimeo.videos.getInfo', array('video_id' => $id));
             $vidUrl = $vidInfo->video;  
             echo  $vid->title;
             echo '<br />';
             print_r($vidUrl->urls->url[0]->{'_content'});
             //echo '<pre>' . print_r($vidUrl) .  '</pre>'; 
         }
    ?>

Thanks a lot

Answer

Tularis picture Tularis · Mar 26, 2014

Considering you have:

    [urls] => stdClass Object
    (
        [url] => Array
            (
                [0] => stdClass Object
                    (
                        [type] => video
                        [_content] => http://vimeo.com/0000
                    )

            )

    )

Accessing an object is done via the object-access-operator (->), while accessing an array is done via square brackets ([x]). So you end up with urls->url[0]->_content in this case. Since urls is an object, and url is an array, whose first ([0]) index contains another object.

So in short, to answer your full original question: $object->urls->url[0]->_content is the URL and $object->thumbnails->thumbnail[0]->_content is the thumbnail