না count()
সত্যিই, সমস্ত একটি পিএইচপি অ্যারের উপাদানের গণনা বা এই মান কোথাও ক্যাসে নিয়ে যাওয়া হয় এবং মাত্র উদ্ধার করা পায়?
না count()
সত্যিই, সমস্ত একটি পিএইচপি অ্যারের উপাদানের গণনা বা এই মান কোথাও ক্যাসে নিয়ে যাওয়া হয় এবং মাত্র উদ্ধার করা পায়?
উত্তর:
ঠিক আছে, আমরা উত্সটি দেখতে পারি:
/ext/standard/array.c
PHP_FUNCTION(count)
কলগুলি php_count_recursive()
, যা ঘুরে ফিরে zend_hash_num_elements()
নন-রিকার্সিভ অ্যারে কল করে , যা এইভাবে প্রয়োগ করা হয়:
ZEND_API int zend_hash_num_elements(const HashTable *ht)
{
IS_CONSISTENT(ht);
return ht->nNumOfElements;
}
সুতরাং আপনি দেখতে পারেন, এটি O(1)
জন্য $mode = COUNT_NORMAL
।
IS_CONSISTENT(ht)
?
পিএইচপি 5+ এ দৈর্ঘ্য অ্যারেতে সংরক্ষণ করা হয় যাতে প্রতিবার গণনা করা হয় না।
সম্পাদনা: আপনি এই বিশ্লেষণটি আকর্ষণীয়ও দেখতে পাবেন: পিএইচপি গণনা সম্পাদনা । যদিও অ্যারের দৈর্ঘ্য অ্যারে দ্বারা বজায় রাখা হয়, তবুও মনে হয় এটির কাছে রাখা যদি আপনি count()
অনেকবার কল করে চলেছেন তবে এটি আরও দ্রুত ।
পিএইচপি অভ্যন্তরীণভাবে একটি অ্যারের আকার সঞ্চয় করে, তবে আপনি এখনও একটি ফাংশন কল করছেন যা যখন না তৈরির চেয়ে ধীর হয়, তাই আপনি যদি ফলটি কোনও ভেরিয়েলে সংরক্ষণ করতে চান তবে যদি আপনি এটি কোনও ব্যবহার করার মতো কিছু করেন তবে লুপ:
উদাহরণ স্বরূপ,
$cnt = count($array);
for ($i =0; $i < $cnt; $i++) {
foo($array[$i]);
}
অতিরিক্তভাবে, আপনি সর্বদা নিশ্চিত হতে পারবেন না যে count
কোনও অ্যারেতে ডাকা হচ্ছে। যদি Countable
উদাহরণস্বরূপ কার্যকর করে এমন কোনও বস্তুর উপরে যদি এটি ডাকা হয় , তবে count
সেই বস্তুর পদ্ধতিটি কল করা হবে।
the count method of that object will be called
, আপনি কি দয়া করে এটি কিছুটা ব্যাখ্যা করতে পারেন
Countable
ইন্টারফেস প্রয়োগ করে তবে কল count($object)
করা কল করা একই জিনিস $object->count()
। উদাহরণস্বরূপ 3v4l.org/oYSSC দেখুন ।
you're still making a function call when which is slower than not making one
এই বক্তব্য ভুল হতে পারে। আপনি যদি ম্যানুয়াল ট্র্যাভারসাল করছেন তবে এটি O(n)
অপারেশন। আপনি যদি কেবল প্রাক গণনা করা মানটি পুনরুদ্ধার করতে চান তবে অপারেশন O(1)
।