PHP: считать объект stdClass - PullRequest
       13

PHP: считать объект stdClass

101 голосов
/ 22 августа 2009

У меня есть объект stdClass, созданный из json_decode, который не возвращает правильное число, когда я запускаю функцию count ($ obj). Объект имеет 30 свойств, но возвращаемое значение функции count () равно 1.

Есть идеи?

Ниже приведен пример одного из объектов. (Я запрашиваю ежедневную информацию о трендах в Твиттере). Если бы этот объект имел более одного свойства, 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
                    )

            )
     )

Ответы [ 6 ]

214 голосов
/ 22 августа 2009

Проблема в том, что count предназначен для подсчета индексов в массиве, а не свойств объекта (если это не пользовательский объект, реализующий интерфейс Countable). Попробуйте привести объект, как показано ниже, в качестве массива и посмотреть, поможет ли это.

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

Простое приведение объекта в виде массива не всегда будет работать, но, будучи простым объектом stdClass, оно должно выполнить работу здесь.

102 голосов
/ 22 августа 2009

Функция подсчета предназначена для использования на

  1. Массивы
  2. Объекты, которые являются производными от классов, которые реализуют счетный интерфейс

Класс stdClass не является ни одним из них. Самый простой / быстрый способ сделать то, что вам нужно, это

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

При этом используется PHP get_object_vars функция, которая будет возвращать свойства объекта в виде массива. Затем вы можете использовать этот массив с функцией подсчета PHP.

9 голосов
/ 22 августа 2009

У объекта нет 30 свойств. Он имеет массив из 30 элементов. Вам нужно количество элементов в этом массиве.

5 голосов
/ 22 августа 2009

Здесь нет ничего плохого в count (), «тренды» - это единственный ключ, который подсчитывается в этом случае, вы можете попробовать сделать:

count($obj->trends);

Или:

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

Или, может быть, даже делает:

count($obj, COUNT_RECURSIVE);
1 голос
/ 01 октября 2017

Просто используйте это

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

переменная $i - это количество ключей.

0 голосов
/ 23 декабря 2015

count() функция работает с массивом. Но если вы хотите посчитать длину объекта, вы можете использовать этот метод.

$total = $obj->length;
...