J'ai fait le tableau suivant:
$clasa = array(
'e1' => array('nume' => 'Nitu', 'prenume' => 'Andrei', 'sex' => 'm', 'varsta' => 23),
'e2' => array('nume' => 'Nae', 'prenume' => 'Ionel', 'sex' => 'm', 'varsta' => 27),
'e3' => array('nume' => 'Noman', 'prenume' => 'Alice', 'sex' => 'f', 'varsta' => 22),
'e4' => array('nume' => 'Geangos', 'prenume' => 'Bogdan', 'sex' => 'm', 'varsta' => 23),
'e5' => array('nume' => 'Vasile', 'prenume' => 'Mihai', 'sex' => 'm', 'varsta' => 25)
);
J'aimerais savoir comment convertir ce tableau en objet à l'aide de stdClass (), je suis un débutant PHP, un exemple simple serait très utile, j'ai essayé de rechercher des questions similaires, mais le les réponses sont compliquées et vont au-delà de ma compréhension des classes et des objets de base.
Vous venez d'ajouter ce code
$clasa = (object) array(
'e1' => array('nume' => 'Nitu', 'prenume' => 'Andrei', 'sex' => 'm', 'varsta' => 23),
'e2' => array('nume' => 'Nae', 'prenume' => 'Ionel', 'sex' => 'm', 'varsta' => 27),
'e3' => array('nume' => 'Noman', 'prenume' => 'Alice', 'sex' => 'f', 'varsta' => 22),
'e4' => array('nume' => 'Geangos', 'prenume' => 'Bogdan', 'sex' => 'm', 'varsta' => 23),
'e5' => array('nume' => 'Vasile', 'prenume' => 'Mihai', 'sex' => 'm', 'varsta' => 25)
);
Si vous voulez voir cet objet stdClass, appelez-le simplement
print_r($clasa);
Si vous voulez convertir un tableau en objet, le code sera
$arr = array('a'=>'Apple','b'=>'ball');
$arr = (object) $arr;
Vous n'avez pas besoin d'utiliser stdClass. Il sera automatiquement converti en stdClass
La méthode rapide et sale utilise json_encode
et json_decode
qui transformera le tableau entier (y compris les sous-éléments) en un objet.
_$clasa = json_decode(json_encode($clasa)); //Turn it into an object
_
La même chose peut être utilisée pour convertir un objet en tableau. Ajoutez simplement _, true
_ à _json_decode
_ pour renvoyer un tableau associé:
_$clasa = json_decode(json_encode($clasa), true); //Turn it into an array
_
Une autre manière (sans être sale) est simplement une fonction récursive:
_function convertToObject($array) {
$object = new stdClass();
foreach ($array as $key => $value) {
if (is_array($value)) {
$value = convertToObject($value);
}
$object->$key = $value;
}
return $object;
}
_
ou en code complet:
_<?php
function convertToObject($array) {
$object = new stdClass();
foreach ($array as $key => $value) {
if (is_array($value)) {
$value = convertToObject($value);
}
$object->$key = $value;
}
return $object;
}
$clasa = array(
'e1' => array('nume' => 'Nitu', 'prenume' => 'Andrei', 'sex' => 'm', 'varsta' => 23),
'e2' => array('nume' => 'Nae', 'prenume' => 'Ionel', 'sex' => 'm', 'varsta' => 27),
'e3' => array('nume' => 'Noman', 'prenume' => 'Alice', 'sex' => 'f', 'varsta' => 22),
'e4' => array('nume' => 'Geangos', 'prenume' => 'Bogdan', 'sex' => 'm', 'varsta' => 23),
'e5' => array('nume' => 'Vasile', 'prenume' => 'Mihai', 'sex' => 'm', 'varsta' => 25)
);
$obj = convertToObject($clasa);
print_r($obj);
?>
_
quelles sorties (notez qu'il n'y a pas de tableaux - seulement stdClass
's):
_stdClass Object
(
[e1] => stdClass Object
(
[nume] => Nitu
[prenume] => Andrei
[sex] => m
[varsta] => 23
)
[e2] => stdClass Object
(
[nume] => Nae
[prenume] => Ionel
[sex] => m
[varsta] => 27
)
[e3] => stdClass Object
(
[nume] => Noman
[prenume] => Alice
[sex] => f
[varsta] => 22
)
[e4] => stdClass Object
(
[nume] => Geangos
[prenume] => Bogdan
[sex] => m
[varsta] => 23
)
[e5] => stdClass Object
(
[nume] => Vasile
[prenume] => Mihai
[sex] => m
[varsta] => 25
)
)
_
Vous y feriez donc référence par _$obj->e5->nume
_.
Si vous souhaitez convertir de manière récursive l'intégralité du tableau en un type d'objet (stdClass), voici la meilleure méthode. Elle ne prend pas beaucoup de temps ni de mémoire, en particulier si vous souhaitez effectuer une conversion récursive (à plusieurs niveaux) par propre fonction.
$array_object = json_decode(json_encode($array));
Une des solutions les plus faciles est
$objectData = (object) $arrayData
Pour convertir un tableau en objet à l'aide de stdClass, ajoutez simplement (object)
au tableau u declare.
EX:
echo $array['value'];
echo $object->value;
convertir un objet en tableau
$obj = (object)$array;
convertir un tableau en objet
$arr = (array)$object
avec ces méthodes, vous pouvez très facilement permuter entre tableau et objet.
Une autre méthode consiste à utiliser JSON
$object = json_decode(json_encode($array), FALSE);
Mais cette méthode nécessite beaucoup plus de mémoire et n’est pas prise en charge par les versions de PHP <= 5.1.
Tableau à stdClass peut être fait en php de cette façon. (stdClass est déjà la classe vide générique de PHP)
$a = stdClass:: __set_state(array());
En fait, appeler stdClass :: __ set_state () dans PHP 5 produira une erreur fatale. merci @Ozzy pour avoir signalé
Voici un exemple d'utilisation de __set_state () avec un objet stdClass en PHP5
class stdClassHelper{
public static function __set_state(array $array){
$stdClass = new stdClass();
foreach ($array as $key => $value){
$stdClass->$key = $value;
}
return $stdClass;
}
}
$newstd = stdClassHelper::__set_state(array());
Ou une façon plus agréable.
$a = (object) array();
ou vous pouvez utiliser cette chose
$arr = [1,2,3];
$obj = json_decode(json_encode($arr));
print_r($obj);
utiliser ceci Tutorial
<?php
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 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;
}
}
// Create new stdClass Object
$init = new stdClass;
// Add some test data
$init->foo = "Test data";
$init->bar = new stdClass;
$init->bar->baaz = "Testing";
$init->bar->fooz = new stdClass;
$init->bar->fooz->baz = "Testing again";
$init->foox = "Just test";
// Convert array to object and then object back to array
$array = objectToArray($init);
$object = arrayToObject($array);
// Print objects and array
print_r($init);
echo "\n";
print_r($array);
echo "\n";
print_r($object);
//OUTPUT
stdClass Object
(
[foo] => Test data
[bar] => stdClass Object
(
[baaz] => Testing
[fooz] => stdClass Object
(
[baz] => Testing again
)
)
[foox] => Just test
)
Array
(
[foo] => Test data
[bar] => Array
(
[baaz] => Testing
[fooz] => Array
(
[baz] => Testing again
)
)
[foox] => Just test
)
stdClass Object
(
[foo] => Test data
[bar] => stdClass Object
(
[baaz] => Testing
[fooz] => stdClass Object
(
[baz] => Testing again
)
)
[foox] => Just test
)