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

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

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

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

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

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

StdClass не является ни тем, ни другим. Более простой / быстрый способ выполнить то, что вам нужно

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

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

Объект не имеет 30 свойств. Он имеет один, который представляет собой массив, содержащий 30 элементов. Вам нужно количество элементов в этом массиве.

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

 count($obj->trends); 

Или:

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

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

 count($obj, COUNT_RECURSIVE); 

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

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

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

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

 $total = $obj->length;