পিএইচপি: একটি stdClass অবজেক্ট গণনা করুন


121

আমার কাছে jdon_decode থেকে তৈরি একটি stdClass অবজেক্ট রয়েছে যা আমি গণনা ($জেজ) ফাংশনটি চালানোর সময় সঠিক নম্বরটি ফিরিয়ে আনব না। অবজেক্টটির 30 টি বৈশিষ্ট্য রয়েছে তবে গণনা () ফাংশনে রিটার্নটি 1 বলে।

কোন ধারনা?

নীচে বস্তুর একটি উদাহরণ দেওয়া আছে। (আমি টুইটার থেকে দৈনিক ট্রেন্ডের তথ্যের জন্য অনুরোধ করছি)। যদি এই বস্তুর একাধিক সম্পত্তি থাকে তবে গণনা ($ اعتراض) 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
                    )

            )
     )

3
আপনি আপনার উদাহরণ স্পষ্ট করতে পারেন? আপনি এটি পোস্ট করার সাথে সাথে এটির একটি সম্পত্তি রয়েছে 2009-08-21 11:05, 20 টি এন্ট্রি সহ একটি অ্যারে রয়েছে, সুতরাং গণনা (nds প্রবণতা) যথাযথভাবে ফিরে আসবে 1
হেনরিক ওপেল

1
হিসাবে স্টিভেন নির্দিষ্ট , অবজেক্ট টাইপ stdClass, যা গণনযোগ্য ইন্টারফেস বাস্তবায়ন নেই হয়, এইভাবে গণনা (<stdClass বস্তুর>) সবসময় ফিরে আসবে 1.
হেনরিক ওপেল

হোপেল, আপনি ঠিক বলেছেন। যদি আমি একটি অ্যারেতে বস্তুটি ফেলে দিই তবে এটি সঠিক সংখ্যাটি দেয়! চমৎকার।
হেলোপ্যাট

আপনি একটি উত্তর গ্রহণ করতে চাইতে পারেন। বিশেষত জিভেন যা আপনি মন্তব্যে লিখেছিলেন যে প্রথম প্রদত্ত উত্তরটি আপনার পক্ষে কাজ করে।
Andresch Serj

উত্তর:


253

সমস্যাটি হ'ল গণনাটি একটি অ্যারেতে সূচিগুলি গণনা করার উদ্দেশ্যে তৈরি হয়, কোনও বস্তুর বৈশিষ্ট্যগুলিতে নয় (যদি না এটি একটি কাস্টম অবজেক্ট যা গণনাযোগ্য ইন্টারফেস প্রয়োগ করে)। নীচের মতো, অ্যারের হিসাবে অবজেক্টটি ingালাই চেষ্টা করুন এবং দেখুন কিনা এটি সাহায্য করে।

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

অ্যারে হিসাবে কেবল কোনও বস্তু castালাই সর্বদা কাজ করে না তবে একটি সাধারণ স্টডি ক্লাস অবজেক্ট হওয়ায় এটি এখানে কাজ করা উচিত।


9
সতর্কতা অবলম্বন করুন যে ব্যক্তিগত বৈশিষ্ট্যগুলি ফলাফলের অ্যারেতে উপস্থিত হবে, যা সত্যই অপ্রত্যাশিত।
হুগো মোটা

14
এই পদ্ধতিটি কাজ করার সময়, আমি এটি প্রয়োগের জন্য ব্যবহার করব না কারণ পিএইচপি-র ভবিষ্যতের সংস্করণগুলি এই কোডটি ভেঙে দিতে পারে, আমি অনেকটাই অ্যালান স্ট্রমের উত্তর পছন্দ করি।
ars265

109

গণনা ফাংশনটি ব্যবহার করা বোঝায়

  1. অ্যারেগুলির
  2. ক্লাস থেকে উদ্ভূত বস্তুগুলি যা গণনাযোগ্য ইন্টারফেস প্রয়োগ করে

একটি স্টাডক্লাস এগুলির মধ্যে একটিও নয়। আপনি যা করছেন তা সম্পাদন করার সহজ / দ্রুততম উপায়

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

এটি পিএইচপি-র get_object_vars ফাংশন ব্যবহার করে, যা কোনও বস্তুর বৈশিষ্ট্যগুলি অ্যারে হিসাবে ফিরিয়ে দেবে। তারপরে আপনি পিএইচপি এর গণনা ফাংশন সহ এই অ্যারেটি ব্যবহার করতে পারেন।


1
পিএইচপি 7 আগে, get_object_vars()একটি অন stdClassঅবজেক্টে একটি অ্যারের ভোটদান একটি খালি অ্যারে সমর্পণ করা হবে থেকে প্রসূত যে। অন্যদিকে stdClassউদাহরণটিকে অ্যারেতে কাস্ট করা সর্বত্র কাজ করে।
Xedin অজ্ঞাত

পিএইচপি 5.6.30 এ আমার জন্য কাজ করে
আর ডাউম্যান

8

বস্তুর 30 টি বৈশিষ্ট্য নেই। এটিতে একটি রয়েছে যা একটি অ্যারেতে 30 টি উপাদান রয়েছে। আপনার এই অ্যারেতে উপাদানগুলির সংখ্যা প্রয়োজন।


1
আরও কিছুটা ডেটাতে পোক করা, json_encode সহ $ এসোসিয়েশন প্যারাম ব্যবহার করা ভাল be যা এটিকে অ্যারেতে রূপান্তর করে। আপনি যে সম্পত্তিটি পাচ্ছেন তার নাম টাইমস্ট্যাম্প থেকে নেওয়া হয়েছে যা নিয়মিত অ্যাক্সেস করার জন্য একটি সঠিক ব্যথা হতে চলেছে। একটি অ্যারে হিসাবে আপনি কেবল গণনা করতে পারেন (nds ট্রেন্ডস [0]);
রব ড্র্মি

আমার সম্ভবত আরও ভাল উদাহরণ দেওয়া উচিত ছিল। StdClass অবজেক্টটিতে উদাহরণ হিসাবে আমি দিয়েছি কেবল তার চেয়ে বেশি রয়েছে। এটিতে 32 টি রয়েছে, যার প্রতিটিটিতে 20 টি উপাদান রয়েছে।
হেলোপ্যাট

5

এখানে গণনা () এর সাথে কোনও ভুল নেই, "ট্রেন্ডস" হল একমাত্র কী যা এই ক্ষেত্রে গণনা করা হচ্ছে, আপনি চেষ্টা করে দেখতে পারেন:

count($obj->trends);

বা:

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

অথবা হতে পারে:

count($obj, COUNT_RECURSIVE);

1

শুধু এটি ব্যবহার করুন

$i=0;
foreach ($object as $key =>$value)
{
$i++;
}

ভেরিয়েবলটি $iকীগুলির সংখ্যা।


0

সাধারণ অ্যারি বা বস্তু গণনা করুন

count($object_or_array); 

বহুমাত্রিক অ্যারি বা বস্তু গণনা করুন

count($object_or_array, 1); // 1 for  multidimensional array count, 0 for Default

-4

count()ফাংশন অ্যারের সাথে কাজ করে। তবে আপনি যদি অবজেক্টের দৈর্ঘ্য গণনা করতে চান তবে আপনি এই পদ্ধতিটি ব্যবহার করতে পারেন।

$total = $obj->length;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.