138

count($obj) 関数を実行したときに正しい数値を返さない json_decode から作成された stdClass オブジェクトがあります。オブジェクトには 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
                    )

            )
     )
4

8 に答える 8

297

問題は、count がオブジェクトのプロパティではなく、配列内のインデックスをカウントすることを意図していることです (それが Countable インターフェイスを実装するカスタム オブジェクトでない限り)。以下のように、オブジェクトを配列としてキャストしてみて、それが役立つかどうかを確認してください。

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

オブジェクトを配列としてキャストするだけでは常に機能するとは限りませんが、単純な stdClass オブジェクトであるため、ここでジョブを実行する必要があります。

于 2009-08-22T00:26:57.830 に答える
120

count 関数は、

  1. 配列
  2. カウント可能なインターフェースを実装するクラスから派生したオブジェクト

stdClass はこれらのどちらでもありません。あなたが求めていることを達成するための最も簡単で迅速な方法は

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

これは、オブジェクトのプロパティを配列として返すPHP のget_object_vars関数を使用します。次に、この配列を PHP の count 関数で使用できます。

于 2009-08-22T01:05:09.277 に答える
9

オブジェクトには 30 個のプロパティがありません。これは、30 個の要素を持つ配列です。その配列の要素数が必要です。

于 2009-08-22T00:27:54.087 に答える
5

ここで count() に問題はありません。この場合、カウントされるキーは「トレンド」だけです。次のようにしてみてください。

count($obj->trends);

または:

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

または多分やっている:

count($obj, COUNT_RECURSIVE);
于 2009-08-22T00:31:17.240 に答える
-5

count()関数は配列で動作します。しかし、オブジェクトの長さを数えたい場合は、このメソッドを使用できます。

$total = $obj->length;
于 2015-12-23T05:11:28.220 に答える