20

I have a stdclass object as shown below:

stdClass Object
(     
    [text] => Parent
    [values] => Array
        (
            [0] => stdClass Object
                (
                    [id] => /m/0c02911
                    [text] => Laurence W. Lane Jr.
                    [url] => http://www.freebase.com/view/m/0c02911
                )

        )

)

I iterate over multiple such objects, some of which have

stdClass Object
(
    [text] => Named after
    [values] => Array
        (
            [0] => stdClass Object
                (
                    [id] => /m/0c02911
                    [text] => Stanford
                    [url] => SomeURL
                )

        )

)

I was wondering how I would access the "values" object if it comes after a "text" that has "Parent" as its value?

Rio
  • 14,182
  • 21
  • 67
  • 107
  • have you tried something along the lines of Object['text']['values'][0]['id'] That's pretty deep array ;) – robx May 03 '11 at 21:18
  • The problem is it would return the object with text value "Named after", and I only want the ones with text value "Parent". Thanks! – Rio May 03 '11 at 21:19
  • 1
    in your loop do a check if(Object['text'] === 'Parent') echo 'Found parent' – robx May 03 '11 at 21:23
  • I'm unsure what language you're using to iterate, but in PHP, it's `$object->values[0]->id`. **Edit:** Oh and "values" is *not an object*, but *an object property*. – Christian May 03 '11 at 21:31
  • Also @robx how do I access the next value? Because the object is not Object['text']['values'], but Object['values'] – Rio May 03 '11 at 21:59

7 Answers7

71

there are serveral ways to turn it to array:

First Solution:

$value = get_object_vars($object);

Second Solution:

$value = (array) $object;

Third Solution

$value = json_decode(json_encode($object), true);

to get value of converted array

echo $value['values']['0']['id'];

The alternate way to access objects var without convert the object, try

$object->values->{'0'}->id
Somwang Souksavatd
  • 4,947
  • 32
  • 30
2

Expanding (or rather minimalizing) upon answer by Somwang Souksavatd, I like accessing Object values like this:

echo get_object_vars($object)['values']['0']['id'];
  • 1
    One thing to note: your "minimalized" version will only work for php version 5.4 or greater. [That was the version that added function array dereferencing.](http://www.php.net/manual/en/migration54.new-features.php) If your php version is lower, Somwang's two-step process would be necessary. – Seth Battin Feb 15 '14 at 23:01
2

I had the same issue, still not so sure why but I was able to get it working using this workaround:

$k2 ="1";
$elements = json_decode('{"id":"1","name":"User1"}');
//$elements['id'] == $k2;  //****Not Working
$tmp  = (object)$elements;
$tmp = $tmp ->id;          //****Working
//$tmp =$elements['id'] ;  //****Not Working
return $tmp == $k2;

I have to say that sometimes accessing the element as array works and some times not,(On PHP7 it worked for me but on PHP5.6 it didn't).

$elements can be Array to but I chose to demonstrate with json string.

I hope this helps somehow !!!

Pini Cheyni
  • 5,073
  • 2
  • 40
  • 58
1


        $Obj=stdClass Object
    (
        [text] => Named after
        [values] => Array
            (
                [0] => stdClass Object
                    (
                        [id] => /m/0c02911
                        [text] => Stanford
                        [url] => SomeURL
                    )

            )

    )
    $Values= $result->values;
    $Item = $Values[0];
    $id=$Item->id;
    $text = $Item->text;
    $url=$Item->url;


0

I'm doing the same thing and all I did was this;

<?php
$stdObject = json_decode($stdClassObject);
print $stdObject->values[0]->id;
pythonian29033
  • 5,148
  • 5
  • 31
  • 56
0

this can help you accessing subarrays in php using codeigniter framework

foreach ($cassule['tarefa'][0] as $tarefa => $novo_puto_ultimos_30_dias) {
                                            echo $novo_puto_ultimos_30_dias;
  • Please provide additional details in your answer. As it's currently written, it's hard to understand your solution. – Community Sep 02 '21 at 08:23
-1

What you are looking for is the Object['values'][0]: 'values' is the keymap just like 'text', and [0] is the index inside that array you wish to access. so if you would like to get the id deep in the nest, you'd have to do something like

Object['values'][0]['id']

or

Object['values'][0]->id

which should give you /m/0c02911. But I have no idea how you are doing your loop, so you will have to adjust it to your needs and place proper variables where they need to go in that code in your loop. Not exactly sure which language you are working with.

robx
  • 3,093
  • 2
  • 26
  • 29
  • The issue here being that I would get the Object['values'] that came after the one that is Object['text'] = Named after, which isn't what I want ;) – Rio May 04 '11 at 05:10
  • if you had used the checking condition up there as I mentioned earlier conjoined with this piece of code, you'd be able to find the array paired with the "Parent". I don't see any reason you can't do it if you were able to find the Parent with the echo statement. – robx May 04 '11 at 05:31
  • Sorry if couldn't help, but thought id try. If you could find and get it to print when locating the parent, then all that's left is your syntax. But if that wasn't you who did the flags up on the checking condition, my mistake for making the assumption ;) – robx May 04 '11 at 06:16