我有一个从 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
)
)
)
问题在于 count 旨在计算数组中的索引,而不是对象的属性(除非它是实现 Countable 接口的自定义对象)。尝试将对象转换为数组,如下所示,看看是否有帮助。
$total = count((array)$obj);
简单地将对象转换为数组并不总是有效,但作为一个简单的 stdClass 对象,它应该在这里完成工作。
计数函数用于
stdClass 都不是这些。 实现您想要的目标的更简单/最快的方法是
$count = count(get_object_vars($some_std_class_object));
这使用 PHP 的 get_object_vars 函数,该函数将以数组形式返回对象的属性。 然后您可以将这个数组与 PHP 的 count 函数一起使用。
该对象没有 30 个属性。它有一个,它是一个包含 30 个元素的数组。您需要该数组中的元素数量。
这里的 count() 没有任何问题,在这种情况下“趋势”是唯一被计算的键,你可以尝试这样做:
count($obj->trends);
或者:
count($obj->trends['2009-08-21 11:05']);
或者甚至可能做:
count($obj, COUNT_RECURSIVE);
您可以使用 ArrayIterator 来实现此目的。
(new \ArrayIterator($obj))->count()
就用这个
$i = 0;
foreach ($object as $key => $value) {
$i++;
}
变量
$i
是键的数量。
您可以使用
sizeof()
函数来获取 PHP 中任何对象的长度!
计算普通数组或对象
count($object_or_array);
计算多维数组或对象
count($object_or_array, 1); // 1 for multidimensional array count, 0 for Default
count()
函数适用于数组。但如果你想计算物体的长度,那么你可以使用这个方法。
$total = $obj->length;