web-dev-qa-db-fra.com

Comment convertir un tableau en objet à l'aide de stdClass ()

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.

93
Alexandrw

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

193
Ekramul Hoque

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_.

DÉMO

53
h2ooooooo

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));
16
darleys

Une des solutions les plus faciles est

$objectData = (object) $arrayData
8
SESN

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.

6
Vikas_web

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();
4
Beaudinn Greve

ou vous pouvez utiliser cette chose

$arr = [1,2,3];
$obj = json_decode(json_encode($arr));
print_r($obj);
3
yussan

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
)
2
Shakti Patel