1. ホーム
  2. php

[解決済み] PHP stdClass オブジェクトを数える

2022-06-03 17:47:48

質問

json_decodeで作成したstdClassオブジェクトがありますが、count($obj)関数を実行しても正しい数値が返されません。 オブジェクトは30のプロパティを持っていますが、count()関数のリターンは1だと言います。

何かアイデアはありますか?

以下は、オブジェクトの1つの例です。 (Twitterから毎日のトレンド情報を要求しています)。 このオブジェクトが複数のプロパティを持つ場合、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オブジェクトであるため、ここでは仕事を成し遂げることができるはずです。