Mohammed CHERIFI

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

:, , ,
1 commentaire pour ce billet:
  1. UpDeL

    Très pratique pour quelqu’un qu’a l’habitude de travailler avec Smarty

Laisser un commentaire

Vous cherchez quelque chose?

Utilisez ce formulaire pour effectuer une recherche

Toujours pas trouvé ce que vous cherchez ? Déposez un commentaire sur un billet, ou contactez-nous