PHP: stdClass nesneyi Toplamı

4 Cevap php

Ben sayımı ($ obj) işlevi çalıştırdığınızda doğru sayıda dönmeyecektir json_decode oluşturulan bir stdClass nesnesi var. Nesne 30 özelliklere sahiptir, ancak sayısı () fonksiyonu dönüş 1 söylüyorlar.

Herhangi bir fikir?

Aşağıda nesnelerden birinin bir örnektir. (Ben heyecan günlük trend bilgi talep ediyorum). Bu nesnenin birden fazla özellik olsaydı, sayısı ($ obj) 1'e eşit olur.

[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 Cevap

Sorun sayısı (o Sayılabilir arabirimini uygulayan özel bir nesne olmadığı sürece) bir dizi değil, bir nesne üzerinde özellikleri de dizinleri saymak için tasarlanmış olmasıdır. Bir dizi olarak, aşağıdaki gibi, nesne döküm ve yardımcı olmadığını görme sahipsiniz.

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

Sadece bir dizi her zaman işe yaramaz gibi bir nesne döküm ama basit bir stdClass bu işi burada halletmek gerekir nesne olmak.

Sayım fonksiyonu kullanılmak içindir

  1. Diziler
  2. Sayılabilen arabirimini uygulayan sınıflar türetilen nesneler

Bir stdClass Bunların ne olduğunu. Sonra konum ne başarmak için kolay / hızlı yoludur

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

Bu, bir dizi olarak bir nesnenin özelliklerini döndürür PHP'nin get_object_vars fonksiyonunu kullanır. Daha sonra PHP'nin sayısı fonksiyonu ile bu dizi kullanabilirsiniz.

Nesne 30 özelliklere sahip değildir. Bu 30 elemanları olan bir dizi olan, bir tane var. O dizideki öğe sayısını gerekir.

Sayısı () Burada yanlış bir şey yok, "eğilimler" Bu durumda sayılır ediliyor tek anahtar olduğunu, ne yaptığını deneyebilirsiniz:

count($obj->trends);

Veya:

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

Ya da belki de yapıyor:

count($obj, COUNT_RECURSIVE);