PHP:stdClass オブジェクトをカウントする
質問
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
)
)
)
解決
問題は、カウントが(それはCountableインターフェイスを実装するカスタムオブジェクトでない限り)、オブジェクトに、配列でないプロパティをインデックスをカウントするように意図されていることです。配列として、以下のように、オブジェクトをキャストしている場合に役立ちます見てみます。
$total = count((array)$obj);
配列は常に動作しませんが、シンプルはstdClassはそれが仕事がここで終らなければならない対象である。とは、単にオブジェクトをキャスト
他のヒント
count 関数は以下で使用することを目的としています。
- 配列
- 可算インターフェイスを実装するクラスから派生したオブジェクト
stdClass はこれらのどちらでもありません。あなたが望んでいることを達成するための最も簡単/迅速な方法は、
$count = count(get_object_vars($some_std_class_object));
これはPHPを使用します get_object_vars この関数は、オブジェクトのプロパティを配列として返します。この配列を PHP の count 関数で使用できます。
オブジェクトには30個の特性を持っていません。それは30個の要素を持つ配列であり、一つを有します。あなたはその配列の要素数を必要とします。
数と間違って何も()ここではありませんが、「トレンド」はこの場合にはカウントされている唯一の鍵である、あなたがやって試すことができます:
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;