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);