23
votes

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?

11
Why is it a stdClass to begin with, can't you create it as array? - deceze♦
Sure just do: $arrayRepresentation = (array) $someStdClass; - Bartosz Grzybowski

11 Answers

69
votes

Cast it to an array:

$array = (array)$stdClass;
35
votes

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;

8
votes

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.

7
votes

Cast it

$array = (array) $stdObject;
4
votes

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.

3
votes

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

$array = (array)$stdClass;
3
votes

Essentially, just type cast it:

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

But read the caveats here.

2
votes

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);
1
votes

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

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

0
votes
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'];
-3
votes

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

echo stdClass->one;