206 votes

Comment convertir un objet en un tableau?

 <?php
   print_r($response->response->docs);
?>
 

Affiche les éléments suivants:

 Array ( [0] => Object ( [_fields:private] => Array ( [id]=>9093 [name]=>zahir) Object ( [_fields:private] => Array ( [id]=>9094 [name]=>hussain)..)
 

Comment puis-je convertir cet objet en un tableau? Je voudrais sortir ce qui suit:

 Array([0]=>([id]=>9093 [name]=>zahir) [1]=>([id]=>9094 [name]=>hussain)...)
 

Est-ce possible?

387voto

Andy E Points 132925

Unique dimensions des tableaux

Pour la conversion de tableaux unidimensionnels, vous pouvez le convertir en utilisant (array) ou get_object_vars, dont Benoit mentionné dans sa réponse.

// Cast to an array
$array = (array) $object;
// get_object_vars
$array = get_object_vars($object);

Ils fonctionnent un peu différents les uns des autres. Par exemple, get_object_vars retournera un tableau avec seulement accessible au public des propriétés, sauf si elle est appelée à partir de l'intérieur de la portée de l'objet que vous êtes en passant (c'est à dire dans une fonction de membre de l'objet). (array), d'autre part, sera jeté sur un tableau avec tous les publics, privés et protégés membres intacts sur le tableau, bien que, bien public, bien sûr.

Multi-dimensions des tableaux

Un peu sale méthode est l'utilisation de PHP >= 5.2 natif du JSON fonctions pour encoder en JSON et décoder ensuite retour à un tableau. Ce ne sera pas inclure des membres privés et protégés, cependant.

// The second parameter of json_decode forces parsing into an associative array
$array = json_decode(json_encode($object), true);

Sinon, la fonction suivante va convertir à partir d'un objet d'un tableau y compris les membres privés et protégés, prises à partir d' ici et modifié pour utiliser la conversion:

function objectToArray ($object) {
    if(!is_object($object) && !is_array($object))
        return $object;

    return array_map('objectToArray', (array) $object);
}

136voto

Benoit Points 1951

Vous devriez regarder get_object_vars , car vos propriétés sont déclarées privées, vous devriez appeler cela dans la classe et renvoyer ses résultats.

Attention, pour les types de données primitifs comme les chaînes, cela fonctionnera très bien, mais je ne sais pas comment cela se comporte avec les objets imbriqués.

44voto

Mufaddal Points 2696

Vous pouvez rapidement convertir des objets profondément imbriqués en tableaux associatifs en vous appuyant sur le comportement des fonctions d'encodage / décodage JSON:

 $array = json_decode(json_encode($response->response->docs), true);
 

34voto

Sergio Points 518

Prudent:

 $array = (array) $object;
 

fait une conversion superficielle ($ object-> innerObject = new stdClass () reste un objet) et la conversion d'avant en arrière avec json fonctionne, mais ce n'est pas une bonne idée si les performances posent problème.

Si vous avez besoin que tous les objets soient convertis en tableaux associatifs, voici un meilleur moyen de le faire (code extrait de je ne me souviens plus où):

 function toArray($obj)
{
    if (is_object($obj)) $obj = (array)$obj;
    if (is_array($obj)) {
        $new = array();
        foreach ($obj as $key => $val) {
            $new[$key] = toArray($val);
        }
    } else {
        $new = $obj;
    }

    return $new;
}
 

18voto

Styx Points 361
$arrayObject = new ArrayObject($object);
$array = $arrayObject->getArrayCopy();

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