Reputation: 243
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
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
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
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
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
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
Reputation: 2620
stdClass is an object so u can access value from it like
echo stdClass->one;
Upvotes: -3
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
Reputation: 20456
Essentially, just type cast it:
$arr = (array)$obj;
$var = $arr[0];
But read the caveats here.
Upvotes: 3
Reputation: 10206
Cast it into an array. Currently it is not readable to PHP as an array.
$array = (array)$stdClass;
Upvotes: 3