[php] PHP : stdClass 객체 계산

count ($ obj) 함수를 실행할 때 올바른 숫자를 반환하지 않는 json_decode에서 만든 stdClass 객체가 있습니다. 객체에는 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
                    )

            )
     )



답변

문제는 count가 개체의 속성이 아니라 배열의 인덱스를 계산하기위한 것입니다 (Countable 인터페이스를 구현하는 사용자 지정 개체가 아닌 경우). 아래와 같이 객체를 배열로 캐스팅하고 도움이되는지 확인하십시오.

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

단순히 객체를 배열로 캐스팅하는 것이 항상 작동하는 것은 아니지만 간단한 stdClass 객체이므로 여기서 작업을 수행해야합니다.


답변

카운트 기능은

  1. 배열
  2. 셀 수있는 인터페이스를 구현하는 클래스에서 파생 된 개체

stdClass는 이들 중 어느 것도 아닙니다. 목표를 달성하는 가장 쉽고 / 빠른 방법은

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

이것은 객체의 속성을 배열로 반환하는 PHP의 get_object_vars 함수를 사용합니다 . 그런 다음이 배열을 PHP의 count 함수와 함께 사용할 수 있습니다.


답변

개체에 30 개의 속성이 없습니다. 하나는 30 개의 요소가있는 배열입니다. 해당 배열의 요소 수가 필요합니다.


답변

여기에서는 count ()에 문제가 없습니다. “trends”가이 경우에 계산되는 유일한 키입니다. 다음을 시도해 볼 수 있습니다.

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($object_or_array); 

다차원 아리아 또는 객체 계산

count($object_or_array, 1); // 1 for  multidimensional array count, 0 for Default


답변

count()함수는 배열과 함께 작동합니다. 그러나 물체의 길이를 세고 싶다면이 방법을 사용할 수 있습니다.

$total = $obj->length;