Lucci Fangorci
Lucci Fangorci

Reputation: 243

stdClass to array?

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?

Upvotes: 23

Views: 92967

Answers (11)

Alex Taylor
Alex Taylor

Reputation: 131

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'];

Upvotes: 0

Michiel
Michiel

Reputation: 2203

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

Upvotes: 2

Mister Verleg
Mister Verleg

Reputation: 4303

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

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

Upvotes: 1

Matej Kovac
Matej Kovac

Reputation: 325

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.

Upvotes: 8

Mike Mackintosh
Mike Mackintosh

Reputation: 14237

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.

Upvotes: 4

Bipin Chandra Tripathi
Bipin Chandra Tripathi

Reputation: 2620

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

echo stdClass->one;

Upvotes: -3

Marcus Recck
Marcus Recck

Reputation: 5065

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;

Upvotes: 36

dnagirl
dnagirl

Reputation: 20456

Essentially, just type cast it:

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

But read the caveats here.

Upvotes: 3

Max Hudson
Max Hudson

Reputation: 10206

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

$array = (array)$stdClass;

Upvotes: 3

KingCrunch
KingCrunch

Reputation: 131881

Cast it

$array = (array) $stdObject;

Upvotes: 7

deceze
deceze

Reputation: 522081

Cast it to an array:

$array = (array)$stdClass;

Upvotes: 69

Related Questions