Consider the following object that is cast to an array.
foo = 'foo';
$obj->bar = 'bar';
$obj->baz = 'baz';
/*** cast the object ***/
$array = (array) $obj;
/*** show the results ***/
print_r( $array );
The result from the code above produces an array representation of the object. This is the desired result as shown here
Array
(
[foo] => foo
[bar] => bar
[baz] => baz
)
Lets now increase the complexity of the object, so that the object bar is itself an object.
foo = 'foo';
$obj->bar = new stdClass;
$obj->bar->baz = 'baz';
/*** cast the object to array ***/
$array = (array) $obj;
/*** show the results ***/
print_r( $array );
?>
From the code above, the issue becomes a little clearer, as the resulting array contains an instance of stdClass, and not an array.
Array
(
[foo] => foo
[bar] => stdClass Object
(
[baz] => baz
)
)
To remedy this situation, some recursion is required to check for an object, and if an object is found, it is give an array representation.
foo = new stdClass;
$obj->foo->baz = 'baz';
$obj->bar = 'bar';
/**
*
* Convert an object to an array
*
* @param object $object The object to convert
* @reeturn array
*
*/
function objectToArray( $object )
{
if( !is_object( $object ) && !is_array( $object ) )
{
return $object;
}
if( is_object( $object ) )
{
$object = get_object_vars( $object );
}
return array_map( 'objectToArray', $object );
}
/*** convert the array to object ***/
$array = objectToArray( $obj );
/*** show the array ***/
print_r( $array );
?>
Now the results show a multi-dimensional array which is a true array representation of the object.
Array
(
[foo] => Array
(
[baz] => baz
)
[bar] => bar
)
Tidak ada komentar:
Posting Komentar