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
Très pratique pour quelqu’un qu’a l’habitude de travailler avec Smarty
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 && ??
Jamel, c’est un bug suite à l’utilisation d’e l’editeur wysiwyg, là c’est corrigé ;)
|| :o)