PHP: 计数一个 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
)


)
)
177912 次浏览

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

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

简单地将对象强制转换为数组并不总是有效,但作为一个简单的 stdClass 对象,它应该可以在这里完成任务。

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

Count ()在这里没有什么问题,“趋势”是这种情况下被计数的唯一关键,你可以尝试这样做:

count($obj->trends);

或者:

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

或者甚至可以这样做:

count($obj, COUNT_RECURSIVE);

Count 函数用于

  1. 阵列
  2. 对象,这些对象派生自实现可数接口的类

StdClass 不是这两种方法中的任何一种

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

这将使用 PHP 的 Get _ object _ vars函数,该函数将以数组的形式返回对象的属性。然后,可以将此数组与 PHP 的 count 函数一起使用。

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

$total = $obj->length;

用这个

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

变量 $i是键的数目。

计数普通阵列或物体

count($object_or_array);

计数多维数组或对象

count($object_or_array, 1); // 1 for  multidimensional array count, 0 for Default

您可以为此目的使用 ArrayIterator。

(new \ArrayIterator($obj))->count()