PHP: подсчет объекта stdClass
У меня есть объект stdClass, созданный из json_decode, который не возвращает правильный номер при запуске функции count($obj). Объект имеет 30 свойств, но возврат функции count() равен 1.
какие идеи?
Ниже приведен пример одного из объектов. (Я запрашиваю ежедневную информацию о тенденциях из Twitter). Если бы этот объект имел более одного свойства, число ($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
)
)
)
6 ответов:
проблема в том, что count предназначен для подсчета индексов в массиве, а не свойств объекта (если это не пользовательский объект, реализующий Счетный интерфейс). Попробуйте привести объект, как показано ниже, в виде массива и посмотреть, поможет ли это.
$total = count((array)$obj);
простое приведение объекта в виде массива не всегда будет работать, но будучи простым объектом stdClass, он должен выполнить эту работу здесь.
функция count предназначена для использования на
- массивы
- объекты, производные от классов, реализующих счетный интерфейс
stdClass не является ни тем, ни другим. Самый простой / быстрый способ выполнить то, что вы после этого
$count = count(get_object_vars($some_std_class_object));
Это использует PHP get_object_vars функция, которая возвращает свойства объекта в виде массива. Затем вы можете использовать этот массив с подсчетом PHP функция.
объект не имеет 30 свойств. Он имеет один, который является массивом, который имеет 30 элементов. Вам нужно количество элементов в этом массиве.
здесь нет ничего плохого в count (), "trends" - это единственный ключ, который подсчитывается в этом случае, вы можете попробовать сделать:
count($obj->trends);
или:
count($obj->trends['2009-08-21 11:05']);
или, может быть, даже делать:
count($obj, COUNT_RECURSIVE);