Single-dimensional arrays
For converting single-dimension arrays, you can cast using (array)
or there's get_object_vars
, which Benoit mentioned in
his answer.
// Cast to an array
$array = (array) $object;
// get_object_vars
$array = get_object_vars($object);
They work slightly different from each other. For example, get_object_vars
will return an array with only publicly accessible properties unless it is called from within the scope of the object you're passing (ie in a member function of the object). (array)
, on the other hand, will cast to an array with all public, private and protected members intact on the array, though all public now, of course.
Multi-dimensional arrays
A somewhat dirty method is to use PHP >= 5.2's native JSON functions to encode to JSON and then decode back to an array. This will not include private and protected members, however, and is not suitable for objects that contain data that cannot be JSON encoded (such as binary data).
// The second parameter of json_decode forces parsing into an associative array
$array = json_decode(json_encode($object), true);
Alternatively, the following function will convert from an object to an array including private and protected members, taken from here and modified to use casting:
function objectToArray ($object) {
if(!is_object($object) && !is_array($object))
return $object;
return array_map('objectToArray', (array) $object);
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…