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是为了使用
- 数组
- 从实现可数接口的类派生的对象
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;