121 votes

Comment convertir un tableau en un objet en utilisant stdClass()

J'ai créé 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 un objet en utilisant stdClass(), je suis un débutant en PHP, un exemple simple serait d'une grande aide, j'ai essayé de chercher des questions similaires, mais les réponses sont compliquées et dépassent ma compréhension des classes et des objets de base.

243voto

Farhad Points 807

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 si c'est un objet stdClass, appelez simplement ceci

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

70voto

h2ooooooo Points 18164

La manière rapide et sale consiste à utiliser json_encode et json_decode qui transformeront l'intégralité du tableau (y compris les sous-éléments) en un objet.

$clasa = json_decode(json_encode($clasa)); //Le transformer en un objet

La même méthode peut être utilisée pour convertir un objet en un tableau. Il suffit d'ajouter , true à json_decode pour retourner un tableau associatif :

$clasa = json_decode(json_encode($clasa), true); //Le transformer en un tableau

Une autre façon (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 :

 $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);
?>

ce qui affiche (remarquez qu'il n'y a pas de tableaux - seulement des objets stdClass) :

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 référence avec $obj->e5->nume.

DEMO

24voto

daa Points 31

Si vous souhaitez convertir de manière récursive l'ensemble du tableau en un type d'objet (stdClass), alors voici la meilleure méthode et elle n'est pas chronophage ni déficiente en mémoire, surtout lorsque vous voulez effectuer une conversion récursive (multiniveau) par rapport à l'écriture de votre propre fonction.

$array_object = json_decode(json_encode($array));

16voto

SESN Points 957

Une des solutions les plus simples est

$objectData = (objet) $arrayData

8voto

Vikas_web Points 127

Pour convertir un tableau en objet en utilisant stdClass, il suffit d'ajouter (object) au tableau que vous déclarez.

EX:

echo $array['value'];
echo $object->value;

Pour convertir un objet en tableau

$obj = (object)$array;

Pour convertir un tableau en objet

$arr = (array)$object

Avec ces méthodes, vous pouvez facilement échanger entre un tableau et un objet.


Une autre méthode consiste à utiliser JSON

$object = json_decode(json_encode($array), FALSE);

Mais c'est une façon beaucoup plus intensive en mémoire de le faire et n'est pas pris en charge par les versions de PHP <= 5.1

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X