programing

PHP: stdClass 개체 수

sourcejob 2023. 1. 17. 21:17
반응형

PHP: stdClass 개체 수

count($obj) 함수를 실행해도 올바른 번호가 반환되지 않는 json_decode에서 stdClass 개체를 만들었습니다.오브젝트에는 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));

이는 PHP의 get_object_vars 함수를 사용하여 객체의 속성을 배열로 반환합니다.그러면 이 배열을 PHP의 카운트 함수와 함께 사용할 수 있습니다.

개체에 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키 수입니다.

이 목적으로 ArrayIterator를 사용할 수 있습니다.

(new \ArrayIterator($obj))->count()

일반 아리야 또는 개체 수

count($object_or_array); 

다차원 아리야 또는 객체 카운트

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

count()기능은 어레이로 동작합니다.그러나 개체의 길이를 계산하려면 이 방법을 사용할 수 있습니다.

$total = $obj->length;

언급URL : https://stackoverflow.com/questions/1314745/php-count-a-stdclass-object

반응형