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?

Sirko
  • 72,589
  • 19
  • 149
  • 183
Lucci Fangorci
  • 243
  • 1
  • 2
  • 4

11 Answers11

69

Cast it to an array:

$array = (array)$stdClass;
deceze
  • 510,633
  • 85
  • 743
  • 889
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;

Marcus Recck
  • 5,075
  • 2
  • 16
  • 26
  • 2
    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. – Marcus Recck Jul 09 '12 at 13:46
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.

Matej Kovac
  • 325
  • 3
  • 7
7

Cast it

$array = (array) $stdObject;
KingCrunch
  • 128,817
  • 21
  • 151
  • 173
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.

Mike Mackintosh
  • 13,917
  • 6
  • 60
  • 87
3

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

$array = (array)$stdClass;
Max Hudson
  • 9,961
  • 14
  • 57
  • 107
3

Essentially, just type cast it:

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

But read the caveats here.

dnagirl
  • 20,196
  • 13
  • 80
  • 123
  • 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`. – dnagirl Jul 09 '12 at 13:58
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);
Michiel
  • 2,143
  • 1
  • 21
  • 21
1

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

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

janw
  • 6,672
  • 6
  • 26
  • 45
Mister Verleg
  • 4,053
  • 5
  • 43
  • 68
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'];
-3

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

echo stdClass->one;
Bipin Chandra Tripathi
  • 2,550
  • 4
  • 28
  • 45