PHP:计算stdClass对象

hel*_*pat 108 php count stdclass

我有一个从json_decode创建的stdClass对象,当我运行count($ obj)函数时,它不会返回正确的数字.该对象有30个属性,但count()函数的返回值为1.

有任何想法吗?

以下是其中一个对象的示例.(我正在从Twitter请求每日趋势信息).如果此对象具有多个属性,则count($ obj)将等于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
                    )

            )
     )
Run Code Online (Sandbox Code Playgroud)

Ste*_*iec 226

问题是count用于计算数组中的索引,而不是对象上的属性(除非它是实现Countable接口的自定义对象).尝试将对象(如下所示)作为数组投射,并查看是否有帮助.

$total = count((array)$obj);
Run Code Online (Sandbox Code Playgroud)

简单地将对象作为数组进行转换并不总是有效,但作为一个简单的stdClass对象,它应该在这里完成工作.

  • 虽然这种方法有效,但我不会将它用于实现,因为PHP的未来版本可能导致此代码中断,我更喜欢Alan Strom的答案. (14认同)
  • 私有属性将出现在结果数组中,这是非常意外的. (9认同)

Ala*_*orm 106

计数功能是用于

  1. 数组
  2. 从实现可数接口的类派生的对象

stdClass既不是这些.完成你所追求的更简单/最快捷的方法是

$count = count(get_object_vars($some_std_class_object));
Run Code Online (Sandbox Code Playgroud)

这使用PHP的get_object_vars函数,该函数将对象的属性作为数组返回.然后,您可以将此数组与PHP的count函数一起使用.


Rob*_*mie 8

该对象没有30个属性.它有一个,这是一个有30个元素的数组.您需要该数组中的元素数量.


Ali*_*xel 5

count()这里没有任何问题,"trend"是在这种情况下被计算的唯一键,您可以尝试:

count($obj->trends);
Run Code Online (Sandbox Code Playgroud)

要么:

count($obj->trends['2009-08-21 11:05']);
Run Code Online (Sandbox Code Playgroud)

或者甚至可能做:

count($obj, COUNT_RECURSIVE);
Run Code Online (Sandbox Code Playgroud)