পিএইচপি অ্যারে: গণনা বা মাপের?


216

কোনও পিএইচপি-তে উপাদানগুলির সংখ্যা খুঁজতে $array, কোনটি দ্রুত / আরও ভাল / শক্তিশালী?

count($array)বা sizeof($array)?

সম্পাদন করা

অ্যান্ডি লেস্টারকে ধন্যবাদ, বহুভাষিক দৃষ্টিকোণ থেকে বোঝাতে আমি আমার প্রশ্নটিকে পরিমার্জন করেছি। ম্যানুয়াল মন্তব্যকারীরা ড

"[আকারের] এর অর্থ সি'র উপর ভিত্তি করে অন্যান্য অনেক ভাষায় একই নয়"

এটা কি সত্য?


72
একটি ডাফ্ট পাঙ্ক রেফারেন্স ... :)
বেন

2
খুব সুন্দর প্রশ্ন। তবে এখানে একটি ভাল বেঞ্চমার্ক সাইট রয়েছে যা বলে যে আকারটি কেবলমাত্র
21

উত্তর:


191

আমি count()যদি সেগুলি একই হয় তবে আমি ব্যবহার করব , যেমনটি আমার অভিজ্ঞতা হিসাবে এটি বেশি সাধারণ, এবং তাই আপনার কোডটি কম বিকাশকারীদের বলতে বাধ্য করবে " sizeof(), এটি কি?" এবং ডকুমেন্টেশনের সাথে পরামর্শ করতে হবে।

আমি মনে করি এটির অর্থ sizeof()সি এর মতো কাজ করে না (কোনও ডেটাটাইপের আকার গণনা করে)। এটা সম্ভবত এই উল্লেখ স্পষ্টভাবে কারণ পিএইচপি সি লেখা আছে, এবং সি ফাংশন (জন্য অভিন্নরুপে নামে চাদরে অনেকটা প্রদান করে strlen(), printf()ইত্যাদি)


92

পিএইচপিবেঞ্চ অনুসারে :

আগাম লুপটির দৈর্ঘ্য গণনা করার জন্য কি এই প্রচেষ্টাটি মূল্যবান?

//pre-calculate the size of array
$size = count($x); //or $size = sizeOf($x);

for ($i=0; $i<$size; $i++) {
    //...
}

//don't pre-calculate
for ($i=0; $i<count($x); $i++) { //or $i<sizeOf($x);
    //...
}

1 বাইট মান সহ 1000 কী সহ একটি লুপ দেওয়া আছে।

                  +---------+----------+
                  | count() | sizeof() |
+-----------------+---------+----------+
| With precalc    |     152 |      212 |
| Without precalc |   70401 |    50644 |
+-----------------+---------+----------+  (time in µs)

সুতরাং আমি ব্যক্তিগতভাবে প্রাক ক্যালকের সাথে আকারের () পরিবর্তে গণনা () ব্যবহার করতে পছন্দ করি ।


3
কম সময় লাগে শুধুমাত্র দয়া করে বলুন। অন্য উত্তরটিও বেশ জটিল এবং বিভ্রান্তিকর! ধন্যবাদ
প্রতীক

6
আপনি পিএইচপি এর কোন সংস্করণ পরীক্ষা করছিলেন? নতুন সংস্করণগুলিতে প্রচুর আশাবাদ রয়েছে যা ফলাফলগুলি একেবারে আলাদা করতে পারে
জন হান্ট

4
এর আকারটি পরিবর্তনশীল হিসাবে সংরক্ষণ না করে আকার কেন দ্রুত হয় তবে অন্যথায় এটি অন্যভাবে? এটি কি পিএইচপি ইন্টারপ্রেটারে কিছু খারাপ ডিজাইনের পছন্দ যা কিছু ধরণের নির্বাচনী ওভারহেডের কারণ হয়? আপনি কীভাবে এটি বেঞ্চমার্ক করেছেন তা আমি জানতে চাই, মাইক্রোসেকেন্ড পরিমাপ আমাকে চিন্তিত করে। লুপের জন্য কোনও বহিরাগত সময়ে এটি প্রচুর পরিমাণে চালানোর চেষ্টা করবেন?
ফ্লুরসেন্টগ্রিন 5

1
"প্রাক ক্যালক" দিয়ে আপনি কী বোঝাতে চাইছেন?
rubo77

1
@ রুবো 77 উপরের কোডটি দেখুন; "প্রাক-ক্যালকুলি" ফর-লুপের আগে একবার অ্যারের আকার নির্ধারণ করে। "প্রাক-ক্যালক" ব্যতীত লুপের অভ্যন্তরে অ্যারের আকার নির্ধারণ করা হয়
রবিআইআইআই

38

তারা অনুসারে অভিন্ন sizeof()

"দ্রুত" সম্পর্কে উদ্বিগ্ন হওয়ার কোনও কারণের অভাবে, সর্বদা মানুষের জন্য অনুকূলিত হন। যা মানব পাঠককে আরও বেশি বোঝায়?


19

ওয়েবসাইট অনুসারে, sizeof()একটি উপনাম count(), সুতরাং তাদের একই কোড চালানো উচিত। সম্ভবত sizeof()ওভারহেডের সামান্য বিট রয়েছে কারণ এটির সমাধান করা দরকার count()? যদিও এটি খুব কম হওয়া উচিত।


53
ঠিক আছে, অনুমান করার জন্য দুঃখিত? আমি কেবল বলছিলাম যে তারা আসলে একই জিনিস। তারপরে, আমি একটি যুক্তিসঙ্গত ধারণা দিয়েছিলাম যে আসল ফাংশনের পরিবর্তে কোনও ফাংশনের জন্য একটি উপাস ব্যবহার করা খুব কম গতি হতে পারে তবে স্বীকার করে নিয়েছি যে "সম্ভবত" শব্দটি দিয়ে প্রাক-প্রয়োগ করে আমার আসলেই কোনও ধারণা নেই। দুঃখিত যদি এটি আপনাকে বিরক্ত করে Sorry সম্ভবত পরবর্তী সময় আমি "ইনফিনিটসিমাল" শব্দটি ব্যবহার করব।
অ্যান্ডি গ্রাফ

8

আমি জানি এটি পুরানো তবে কেবল উল্লেখ করতে চেয়েছিলাম যে আমি এটি পিএইচপি 7.2 দিয়ে চেষ্টা করেছি :

<?php
//Creating array with 1 000 000 elements
$a = array();
for ($i = 0; $i < 1000000; ++$i)
{
    $a[] = 100;
}

//Measure
$time = time();
for ($i = 0; $i < 1000000000; ++$i)
{
    $b = count($a);
}
print("1 000 000 000 iteration of count() took ".(time()-$time)." sec\n");

$time = time();
for ($i = 0; $i < 1000000000; ++$i)
{
    $b = sizeof($a);
}
print("1 000 000 000 iteration of sizeof() took ".(time()-$time)." sec\n");
?>

এবং ফলাফল ছিল:

1 000 000 000 iteration of count() took 414 sec
1 000 000 000 iteration of sizeof() took 1369 sec

সুতরাং শুধু ব্যবহার count()


এটা মজার. আপনি কোন পিএইচপি সংস্করণ ব্যবহার করবেন?
ওয়াজা

@ ওয়াজা আমি পিএইচপি 7.2 ব্যবহার করছি
মেহেদি বাউনিয়া

1
পিএইচপি 7.3.3 সহ: 1 000 000 000 iteration of count() took 525 sec 1 000 000 000 iteration of sizeof() took 1361 sec
অ্যান্থনিবি 22'19

6

sizeof()count() এখানে উল্লিখিত যেমন একটি উপনাম

http://php.net/manual/en/function.sizeof.php


4
+ অ্যালেক্স হ্যাঁ এটি করে। আমি দুটি লিঙ্ক দেখতে পাচ্ছি। আপনি কি তাকে আকারের পুনর্লিখনের প্রত্যাশা করেছিলেন? LOL: p
গোগল

-2

দয়া করে গণনা ফাংশনটি ব্যবহার করুন, এখানে একটি উপাদানটিতে অ্যারে গণনা করার উদাহরণ a

$cars = array("Volvo","BMW","Toyota");
echo count($cars);

count()ফাংশন একটি অ্যারের মধ্যে উপাদানের সংখ্যা ফেরৎ।

sizeof()ফাংশন একটি অ্যারের মধ্যে উপাদানের সংখ্যা ফেরৎ।

sizeof()ফাংশনের উপনাম হল count()ফাংশন।

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