23

i have:

stdClass Object
(
    [0] => stdClass Object
        (
            [one] => aaa
            [two] => sss
        )

    [1] => stdClass Object
        (
            [one] => ddd
            [two] => fff
        )

    [2] => stdClass Object
        (
            [one] => ggg
            [two] => hhh
        )
}

and i must get this with keys, for example:

$var = $stdClass[0]; 

but i have error:

Fatal error: Cannot use object of type stdClass as array in

Is possible parse this stdClass to array and use this with keys?

3
  • Why is it a stdClass to begin with, can't you create it as array? Commented Jul 9, 2012 at 13:30
  • 2
    Sure just do: $arrayRepresentation = (array) $someStdClass; Commented Jul 9, 2012 at 13:32
  • Possible duplicate of Convert stdClass object to array in PHP Commented Jun 20, 2017 at 9:42

11 Answers 11

68

Cast it to an array:

$array = (array)$stdClass;
Sign up to request clarification or add additional context in comments.

5 Comments

Where does that data come from to begin with?
i use json and json_decode function. I add for this function parameter true, but still i have empty array
$array = json_decode($jsonData, true); does not work? Please show a full example, including what the JSON data looks like.
if i use true then i have empty array. If i use yout solution this working only for current array - children array still are stdClass
Yes, the children will still be stdClass objects, you'll have to cast them as well.
36

If you're using json_decode to convert that JSON string into an object, you can use the second parameter json_decode($string, true) and that will convert the object to an associative array.

If not, what everybody else has said and just type cast it

$array = (array) $stdClass;

1 Comment

You should have no problem using json_decode is you do: $array = json_decode($string, true); Then using print_r will give the associative array with the keys.
8

Your problem is probably solved since asking, but for reference, quick uncle-google answer:

function objectToArray($d) {
  if(is_object($d)) {
    $d = get_object_vars($d);
  }
  if(is_array($d)) {
    return array_map(__FUNCTION__, $d); // recursive
  } else {
    return $d;
  }
}

Full article here. Note I'm not associated with the original author in any way.

Comments

7

Cast it

$array = (array) $stdObject;

3 Comments

if now user $array[0] then i have empty array
this working only for current array. Childrens array still are stdObject
@LucciFangorci You didn't mentioned, that you want the whole tree. For now I don't even see a reason, why: echo $array[0]->two.
4

Of course you can typecast, $var = (array) $obj;, but I would suggest ArrayAccess to your class.

By using ArrayAccess, you can then treat your objects and data as if it was an array, or natively as an object.

Comments

3

Cast it into an array. Currently it is not readable to PHP as an array.

$array = (array)$stdClass;

1 Comment

$array[0][one] will return aaa
3

Essentially, just type cast it:

$arr = (array)$obj;
$var = $arr[0];

But read the caveats here.

1 Comment

since you've got objects inside of objects, you'll need to cast the containing object to an array and iterate it. While iterating through it, access the property you want $var->one.
2

If you have an nested array you can used json_encode and json_decode to convert the whole object to an array:

$result = json_decode(json_encode($source), JSON_OBJECT_AS_ARRAY);

Comments

1

This one worked for me, The decoding and encoding makes for a regular array

$array = json_decode(json_encode($object), True);

Comments

0
function load_something () : \stdClass {

    $result = new \stdClass();

    $result->varA   = 'this is the value of varA';
    $result->varB   = 'this is the value of varB';
    $result->varC   = 'this is the value of varC';

    return $result;
}

$result = load_something();

echo ($result instanceof stdClass)?'Object is stdClass':'Object is not stdClass';
echo PHP_EOL;

print_r($result);

//directly extract a variable from stdClass 
echo PHP_EOL . 'varA = ' . ($result->varA);

//convert to array, then extract
$array = (array)$result;
echo PHP_EOL . 'varA = ' . $array['varA'];

Comments

-3

stdClass is an object so u can access value from it like

echo stdClass->one;

1 Comment

@Petah yes but i think he will have to use foreach too.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.