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

Partager cet article:
  • Twitter
  • Facebook
  • Google Bookmarks
  • del.icio.us
  • Netvibes
  • viadeo FR
  • Digg
  • LinkedIn
  • Slashdot
  • Sphinn
  • Mixx
  • Blogplay
  • Identi.ca
  • Print
  • Ping.fm
  • email
  • Posterous
  • Reddit
  • Yahoo! Buzz
  • PDF
  • RSS
  • Diigo
  • Fark
  • Blogosphere News
  • blogtercimlap

  1. UpDeL dit :

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

  2. Jamel naitssi dit :

    joli tutoriel Mr.cherifi , c’est intéressant fréro, sauf que dans le code à la ligne 4 ya ça :
    04. if(is_array($tab) && !empty($tab))

    alors les &&amp ??

  3. Jamel, c’est un bug suite à l’utilisation d’e l’editeur wysiwyg, là c’est corrigé ;)

  4. Jamel naitssi dit :

    || :o)