PHP:计数一个stdClass对象

我有一个从json_decode创build的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 ) ) ) 

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

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

简单地将一个对象转换为一个数组并不总是能够工作,而是一个简单的stdClass对象,它应该在这里完成工作。

计数function是为了使用

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

stdClass既不是这些。 最简单/最快捷的方式来完成你所追求的

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

这使用PHP的get_object_vars函数,它将以数组forms返回对象的属性。 然后你可以使用这个数组和PHP的计数函数。

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

count()在这里没有什么错,“趋势”是在这种情况下被计算的唯一的关键,你可以试着做:

 count($obj->trends); 

要么:

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

或者甚至可以这样做:

 count($obj, COUNT_RECURSIVE); 

只要使用这个

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

variables$i是键的数量。

count()函数与数组一起工作。 但是如果你想计算对象的长度,那么你可以使用这种方法。

 $total = $obj->length;