web-dev-qa-db-fra.com

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
                    )

            )
     )
104
hellopat

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.

218
Steven Surowiec

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.

104
Alan Storm

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.

9
Rob Drimmie

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);
5
Alix Axel

Il suffit d'utiliser cette

$i=0;
foreach ($object as $key =>$value)
{
$i++;
}

la variable $i est le nombre de clés.

0
Arash Younesi