135 votes

PHP: Compter un objet stdClass

J'ai un objet stdClass créé à partir de json_decode qui ne renvoie pas le bon nombre lorsque j'exécute la fonction count ($ obj). L'objet a 30 propriétés, mais le retour sur la fonction count () est dit 1.

Des idées?

Vous trouverez ci-dessous un exemple d'un des objets. (Je demande les informations sur les tendances quotidiennes de Twitter). Si cet objet avait plus d'une propriété, le nombre ($ obj) serait égal à 1.

 [trends] => stdClass Object
    (
        [2009-08-21 11:05] => Array
            (
                [0] => stdClass Object
                    (
                        [query] => "Follow Friday"
                        [name] => Follow Friday
                    )

                [1] => stdClass Object
                    (
                        [query] => "Inglourious Basterds" OR "Inglorious Basterds"
                        [name] => Inglourious Basterds
                    )

                [2] => stdClass Object
                    (
                        [query] => Inglourious
                        [name] => Inglourious
                    )

                [3] => stdClass Object
                    (
                        [query] => #songsincode
                        [name] => #songsincode
                    )

                [4] => stdClass Object
                    (
                        [query] => #shoutout
                        [name] => #shoutout
                    )

                [5] => stdClass Object
                    (
                        [query] => "District 9"
                        [name] => District 9
                    )

                [6] => stdClass Object
                    (
                        [query] => #howmanypeople
                        [name] => #howmanypeople
                    )

                [7] => stdClass Object
                    (
                        [query] => Ashes OR #ashes
                        [name] => Ashes
                    )

                [8] => stdClass Object
                    (
                        [query] => #youtubefail
                        [name] => #youtubefail
                    )

                [9] => stdClass Object
                    (
                        [query] => TGIF
                        [name] => TGIF
                    )

                [10] => stdClass Object
                    (
                        [query] => #wish09
                        [name] => #wish09
                    )

                [11] => stdClass Object
                    (
                        [query] => #watch
                        [name] => #watch
                    )

                [12] => stdClass Object
                    (
                        [query] => Avatar
                        [name] => Avatar
                    )

                [13] => stdClass Object
                    (
                        [query] => Ramadhan
                        [name] => Ramadhan
                    )

                [14] => stdClass Object
                    (
                        [query] => Goodnight
                        [name] => Goodnight
                    )

                [15] => stdClass Object
                    (
                        [query] => iPhone
                        [name] => iPhone
                    )

                [16] => stdClass Object
                    (
                        [query] => #iranelection
                        [name] => #iranelection
                    )

                [17] => stdClass Object
                    (
                        [query] => Apple
                        [name] => Apple
                    )

                [18] => stdClass Object
                    (
                        [query] => "Usain Bolt"
                        [name] => Usain Bolt
                    )

                [19] => stdClass Object
                    (
                        [query] => H1N1
                        [name] => H1N1
                    )

            )
     )
 

291voto

Steven Surowiec Points 3833

Le problème est que count est destiné à compter les index d'un tableau, et non les propriétés d'un objet (sauf s'il s'agit d'un objet personnalisé qui implémente l'interface Countable). Essayez de transformer l'objet, comme ci-dessous, sous forme de tableau et de voir si cela vous aide.

 $total = count((array)$obj);
 

Transformer un objet en tant que tableau ne fonctionnera pas toujours, mais comme il s'agit d'un simple objet stdClass, le travail doit être effectué ici.

119voto

Alan Storm Points 82442

La fonction de décompte est destinée à être utilisée sur

  1. Tableaux
  2. Objets dérivés de classes qui implémentent l'interface dénombrable

Un stdClass n'est ni l'un ni l'autre. Le moyen le plus facile / rapide d'accomplir ce que vous recherchez est

 $count = count(get_object_vars($some_std_class_object));
 

Cela utilise la fonction get_object_vars de PHP, qui renverra les propriétés d'un objet sous forme de tableau. Vous pouvez ensuite utiliser ce tableau avec la fonction count de PHP.

9voto

Rob Drimmie Points 979

L'objet n'a pas 30 propriétés. Il en a un, qui est un tableau de 30 éléments. Vous avez besoin du nombre d'éléments dans ce tableau.

5voto

Alix Axel Points 63455

Count () ici, "les tendances" est la seule clé qui est comptée dans ce cas, vous pouvez essayer de faire:

 count($obj->trends);
 

Ou:

 count($obj->trends['2009-08-21 11:05']);
 

Ou peut-être même faire:

 count($obj, COUNT_RECURSIVE);
 

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