I'm struggling to parse the below data using PHP. An API returns it, and I've tried various syntaxes. How do I return the data in a non-object way? Or, what's the syntax to call the data using the stdClass?
Could I convert this to one data based array, or even two? I'm lost when it comes to object-based data sets.
stdClass Object
(
[0] => stdClass Object
(
[district] => stdClass Object
(
[state] => NY
[number] => 29
)
)
[1] => stdClass Object
(
[district] => stdClass Object
(
[state] => NY
[number] => 26
)
)
)
When i create the object on my own, and then do a var_dump, I get this:
object(stdClass)#8 (2) {
[0]=>
object(stdClass)#4 (1) {
["district"]=>
object(stdClass)#5 (2) {
["state"]=>
string(2) "NY"
["number"]=>
string(2) "29"
}
}
[1]=>
object(stdClass)#6 (1) {
["district"]=>
object(stdClass)#7 (2) {
["state"]=>
string(2) "NY"
["number"]=>
string(2) "26"
}
}
}
They are probably casting arrays to objects in their code ($object = (object) $array
). This has the advantage that it will be passed by reference from now on (as is the default with objects) and the disadvantage that the object is completely useless (members cannot start with numbers - see the regex in PHP's docs) until you cast it back (PHP does allow some very mysterious things):
$array = (array) $bogusObject;
$array[0]->district->state === 'NY';
Use:
$object->{'0'}->district->state
Basically You're short-cutting assigning a string to a variable, then using that variable as your object accessor.
$zero = "0";
$object->$zero; /* or */ $object->{$zero};
I'm looking at their code now, and unfortunately, they've not exposed the option in their class for you to request the data as a associative array tree vs a stdClass object tree.
The "problem" is at line 96 in class.sunlightlabs.php
return json_decode( $data );
You have a couple options.
#1 in action
// echo the state of the 2nd object in the result
echo $result->{0}->district->state;
#2 in action
$result = toArray( $result );
function toArray( $data )
{
if ( is_object( $data ) )
{
$data = get_object_vars( $data );
}
return is_array($data) ? array_map(__FUNCTION__, $data) : $data;
}
You could also work with their class directly via some creative application of patterns, but they make heavy use of sublcasses already which complicates it quite a bit, so I'd stick to one of these two solutions.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With