Here below, one will find two recursive functions to convert multi-dimensional Objects To Array and Multidimensional Aarrays to Objects :
Function to Convert stdClass Objects to Multidimensional Arrays:
function objectToArray($d) {
if (is_object($d)) {
// Gets the properties of the given object
// with get_object_vars function
$d = get_object_vars($d);
}
if (is_array($d)) {
/*
* Return array converted to object
* Using __FUNCTION__ (Magic constant)
* for recursive call
*/
return array_map(__FUNCTION__, $d);
}
else {
// Return array
return $d;
}
}
Function to Convert Multidimensional Arrays to stdClass Objects:
function arrayToObject($d) {
if (is_array($d)) {
/*
* Return array converted to object
* Using __FUNCTION__ (Magic constant)
* for recursive call
*/
return (object) array_map(__FUNCTION__, $d);
}
else {
// Return object
return $d;
}
}
Example:
<?php // Create new stdClass Object $init = new stdClass; $init->debut = "14:00"; $init->fin = "18:00"; $init2 = array(); $init2[0]= new stdClass; $init2[0]->debut = "09:00"; $init2[0]->fin = "12:00"; $init2[1]= new stdClass; $init2[1]->debut = "14:00"; $init2[1]->fin = "19:00"; var_dump($init); var_dump($init2); // Convert objects to array and then array to backobject
$array = $this->objectToArray($init);
$array2 = $this->objectToArray($init2);
var_dump($array);
var_dump($array2);
$object = $this->arrayToObject($array);
$object2 = $this->arrayToObject($array2);
var_dump($array2);
function objectToArray($d) {
if (is_object($d)) {
// Gets the properties of the given object
// with get_object_vars function
$d = get_object_vars($d);
}
if (is_array($d)) {
/*
* Return object converted to array
* Using __FUNCTION__ (Magic constant)
* for recursive call
*/
return array_map(__FUNCTION__, $d);
}
else {
// Return array
return $d;
}
}
function arrayToObject($d) {
if (is_array($d)) {
/*
* Return array converted to object
* Using __FUNCTION__ (Magic constant)
* for recursive call
*/
return (object) array_map(__FUNCTION__, $d);
}
else {
// Return object
return $d;
}
}
?>
cf. http://www.if-not-true-then-false.com/2009/php-tip-convert-stdclass-object-to-multidimensional-array-and-convert-multidimensional-array-to-stdclass-object/
Using array_map within a class function is not straight forward : the reference to the function has to be written like this : array_map(array($this,__FUNCTION__), $d);
Here is an example of this usage :
<?php
$Chrono = new Relais();
$Chrono->convert();
class Relais {
public function convert()
{
// Create new stdClass Object
$init = new stdClass;
$init->debut = "14:00";
$init->fin = "18:00";
$init2 = array();
$init2[0]= new stdClass;
$init2[0]->debut = "09:00";
$init2[0]->fin = "12:00";
$init2[1]= new stdClass;
$init2[1]->debut = "14:00";
$init2[1]->fin = "19:00";
// var_dump($init);
//var_dump($init2);
// Convert array to object and then object back to array
$array = $this->objectToArray($init);
$array2 = $this->objectToArray($init2);
var_dump($array);
var_dump($array2);
$object = $this->arrayToObject($array);
$object2 = $this->arrayToObject($array2);
// var_dump($object);
var_dump($object2);
}
private function objectToArray($d) {
if (is_object($d)) {
// Gets the properties of the given object
// with get_object_vars function
$d = get_object_vars($d);
}
if (is_array($d)) {
/*
* Return object converted to array
* Using __FUNCTION__ (Magic constant)
* for recursive call
*/
return array_map(array($this,__FUNCTION__), $d);
}
else {
// Return array
return $d;
}
}
private function arrayToObject($d) {
if (is_array($d)) {
/*
* Return array converted to object
* Using __FUNCTION__ (Magic constant)
* for recursive call
*/
return (object) array_map(array($this,__FUNCTION__), $d);
}
else {
// Return object
return $d;
}
}
}
?>