PHP Convertir un tableau en objet stdClass
par Mohammed CHERIFI le 30 déc, 2009, dans la catégorie PHP
Hola les amis!
Travailler avec des tableaux en PHP est parfois embêtant, surtout quand il s’agit d’un long tableau avec une dizaine d’éléments, je préfère écrire
$obj->element1->element2->element3
plutôt que
$obj['element1']['element2']['element3']
Dans ce tutoriel on verra comment convertir une variable de type Array à un objet de type stdClass:
On considère le tableau suivant :
$tab = array(
'key1' =>; 'Hello',
'key2' => array(
'subkey1'=>'subval1',
'subkey2'=>'subval2',
'subkey3'=> array('foo'=>'bar')
)
);
Première méthode : Type Casting
Le type casting est une méthode qui consiste à forcer le type d’une variable en la précédant du type voulu, exemple :
function array_to_object($tab)
{
return (object)$tab ;
}
$tab = array(
'key1' => 'Hello',
'key2' => array(
'subkey1'=>'subval1',
'subkey2'=>'subval2',
'subkey3'=> array('foo'=>'bar')
)
);
print_r(array_to_object($tab));
Cette méthode marche, mais elle n’est pas récursive, du coup seules les premiers éléments du tableau sont convertis en objets stdClass (key1,key2), le subkey3 reste toujours de type Array :
stdClass Object
(
[key1] => Hello
[key2] => Array
(
[subkey1] => subval1
[subkey2] => subval2
[subkey3] => Array
(
[foo] => bar
)
)
)
Pour accéder à la valeur de la clé « foo », du sous-tableau « subkey3″ on doit faire : $tab->key2['subkey3]['foo'], ce qui est un peu chiant, on doit donc parcourir le tableau de façon récursive pour obtenir : $tab->key2->subkey3->foo!
Deuxième méthode: une fonction array_to_object()
function array_to_object($tab)
{
$data = new stdClass ;
if(is_array($tab) && !empty($tab))
{
foreach($tab as $key => $val)
{
if(is_array($val))
$data->$key = array_to_object($val);
else
$data->$key = $val ;
}
}
return $data ;
}
$tab = array(
'key1' => 'Hello',
'key2' => array(
'subkey1'=>'subval1',
'subkey2'=>'subval2',
'subkey3'=> array('foo'=>'bar')
)
);
print_r(array_to_object($tab));
Résultat d’exécution :
stdClass Object
(
[key1] => Hello
[key2] => stdClass Object
(
[subkey1] => subval1
[subkey2] => subval2
[subkey3] => stdClass Object
(
[foo] => bar
)
)
)
Et voilà, tout est objet! ainsi on peut faire : $tab->key2->subkey3->foo ce qui est plus joli à mon gout =)
Happy coding
30 décembre, 2009 à 21 h 17 min
Très pratique pour quelqu’un qu’a l’habitude de travailler avec Smarty