এটি দ্রুত করুন।
নিম্ন স্তরের কলগুলি খুব দ্রুত হওয়া দরকার তাই আমি ভেবেছিলাম এটি কিছু গবেষণার জন্য মূল্যবান। আমি কয়েকটি পদ্ধতি চেষ্টা করেছি (বিভিন্ন স্ট্রিং দৈর্ঘ্য, এক্সটেনশন দৈর্ঘ্য, একাধিক রান সহ), এখানে কিছু যুক্তিসঙ্গত বিষয় রয়েছে:
function method1($s) {return preg_replace("/.*\./","",$s);} // edge case problem
function method2($s) {preg_match("/\.([^\.]+)$/",$s,$a);return $a[1];}
function method3($s) {$n = strrpos($s,"."); if($n===false) return "";return substr($s,$n+1);}
function method4($s) {$a = explode(".",$s);$n = count($a); if($n==1) return "";return $a[$n-1];}
function method5($s) {return pathinfo($s, PATHINFO_EXTENSION);}
ফলাফল
খুব অবাক করা হয়নি। দরিদ্রতম pathinfo
(খুব দূরে!) ধীরে ধীরে (দেখে মনে হচ্ছে তিনি পুরো জিনিসটি বিশ্লেষণ করার চেষ্টা করছেন এবং তারপরে সমস্ত অপ্রয়োজনীয় অংশগুলি ফেলে দিতে পারেন) - এবং method3()
(স্ট্রাইপপস) খুব দ্রুততম:
Original filename was: something.that.contains.dots.txt
Running 50 passes with 10000 iterations each
Minimum of measured times per pass:
Method 1: 312.6 mike (response: txt) // preg_replace
Method 2: 472.9 mike (response: txt) // preg_match
Method 3: 167.8 mike (response: txt) // strrpos
Method 4: 340.3 mike (response: txt) // explode
Method 5: 2311.1 mike (response: txt) // pathinfo <--------- poor fella
দ্রষ্টব্য: প্রথম পদ্ধতির একটি পার্শ্ব প্রতিক্রিয়া রয়েছে: কোনও এক্সটেনশন না থাকলে এটি পুরো নামটি দেয়। অবশ্যই এই আচরণটি এড়ানোর জন্য এটি অতিরিক্ত স্ট্রপো দিয়ে এটি পরিমাপ করার কোনও ধারণা নেই।
উপসংহার
এটি সমুরাইয়ের মতো দেখাচ্ছে:
function fileExtension($s) {
$n = strrpos($s,".");
return ($n===false) ? "" : substr($s,$n+1);
}