Halo gaes, saya mau curhat lagi nih gaes. Katakanlah saya lagi ngembangin web orang dan bermain-main dengan API, jadi sudah barang tentu saya akrab dengan casting data JSON ke stdClass object PHP. Saya melakukannya dengan bantuan json_decode.
Nah, masalahnya adalah ketika saya ingin menghitung jumlah object yang ada di stdClass dengan cara seperti ini count($obj), dimana $obj adalah variable yang menampung output json_decode. Apa yang terjadi? ternyata dari hasil count itu saya cuman mendapat value 1, faktanya ketika saya print data itu lebih dari 1 object, seperti ini.
[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
)
)
)
Jadi, kenapa ini bisa terjadi? apa cara yang saya lakukan salah?
Solusi
Masalahnya adalah ternyata hitungan yang saya maksud adalah untuk indeks dalam array, bukan properties dalam object. Tapi cara yang saya lakukan di atas justru sebaliknya, makanya tak heran jika outputnya selalu 1.
Lalu saya benahi sekenarionya menjadi:
- casting object menjadi array seperti ini (array)$obj
- hitung index array tersebut.
$total = count((array)$obj);
Disclaimer: cara di atas hanya bekerja untuk kasus stdClass object sederhana, dan belum tentu bisa untuk kasus dengan hirarki data yang kompleks.