কিছুদিন আগে আমাদের অফিসে ব্যবহারের জন্য PHP’র সাহায্যে ওয়েবভিত্তিক একটি সফটওয়্যার তৈরি করি। মূলত এটি ছিল হিসাব নিকাশের একটি সফটওয়্যার। এর কাজ হলো আমারা যেসব কেনাকাটা করি তার কতটুকু পরিশোধ করা হয়েছে, কয়টি কিস্তিতে করা হয়েছে, শেষ কিস্তি দেয়া হয়েছে কিনা, ইত্যাদি ইত্যাদি রেকর্ড রাখা।
সফটওয়্যারটি তৈরিতে বাংলা নম্বর নিয়ে কিছু কাজ করতে হয়। এসব কাজের ঘষামাজা-করা চূড়ান্ত কিছু Code Snippet এখানে দেয়া হলো।
১। শুধু ডিজিট পরিবর্তন করা:
strtr
ফাংশনের সাহায্যে খুব সহজেই ইংরেজি ডিজিটগুলোকে বাংলা ডিজিটে পরিবর্তিত করা যায়। যেমন, তারিখ “29/02/2020 ইং”-কে “২৯/০২/২০২০ ইং”-এ পরিবর্তিত করা।
$number = 12345; $string = '29/02/2020 ইং'; $en_to_bn_digits = array ( 0 => '০', 1 => '১', 2 => '২', 3 => '৩', 4 => '৪', 5 => '৫', 6 => '৬', 7 => '৭', 8 => '৮', 9 => '৯', ); echo strtr($number, $en_to_bn_digits); // Output: ১২৩৪৫ echo strtr($string, $en_to_bn_digits); // Output: ২৯/০২/২০২০ ইং
এখানে strtr
ফাংশনের কাজ হলো আমাদের প্রদত্ত নম্বরের প্রতিটি ডিজিট অথবা স্ট্রিং (String)-এর প্রতিটি ক্যারেক্টার (Character)-এর সাথে $en_to_bn_digits
অ্যারে’র (Array) প্রতি জোড়ার প্রথমটিকে মিলিয়ে দেখা। এবং মিলে গেলে জোড়ার দ্বিতীয়টা দ্বারা পরিবর্তন করা। PHP-তে অ্যারে যেহেতু 0 (Zero) ইনডেক্স থেকে শুরু হয়, সেহেতু আমরা উক্ত অ্যারে’র প্রতি জোড়ার প্রথমটা বাদ দিতে পারি।
$number = 456789; $bn_digits = array ( '০', '১', '২', '৩', '৪', '৫', '৬', '৭', '৮', '৯', ); echo strtr($number, $bn_digits); // Output: ৪৫৬৭৮৯
তবে মোবাইল নম্বর এবং যেসব নম্বরের প্রথমে 0 (Zero) আছে সেগুলোকে সরাসরি এভাবে পরিবর্তন করা যাবে না। কেননা PHP-তে কোনো স্বাভাবিক সংখ্যার (Integer) প্রথমে 0 (Zero) থাকলে সেটিকে অকটাল (Octal) নম্বর হিসেবে ধরে নেয়। আর দশমিকযুক্ত সংখ্যার ক্ষেত্রে প্রথম শূন্যগুলো বাদ পড়ে যায়। যেমন:-
// Octal 123 = Decimal 83 echo 0123; // Output: 83 echo -0123; // Output: -83 echo 012.3; // Output: 12.3 echo '0123'; // Output: 0123
তাই সংখ্যার শুরুতে 0 (Zero) থাকলে এটিকে উদ্ধৃতি চিহ্নের ভিতরে রেখে কাজ করতে হবে।
২। কমা সম্বলিত নম্বর (Comma Separated Number)
কোন সংখ্যাকে কমা সম্বলিত নম্বরে পরিবর্তিত করতে হলে নিচের কোডগুলো ব্যবহার করতে পারি।
$number = 123456789.12345; $regex = "/(?<!\.|\.\d)(\d+?)(?=(\d\d)+(\d)(?!\d))/i"; $output = preg_replace($regex, "$1,", $number); echo $output; // Output // 12,34,56,789.12345
এখানে একটি রেগুলার এক্সপ্রেশন (Regular Expression) ব্যবহার করা হয়েছে। এটি ৯৯,৯৯,৯৯,৯৯৯.৯৯৯ (নিরানব্বই কোটি …) পর্যন্ত এবং পাঁচ দশমিক স্থান পর্যন্ত সঠিক আউটপুট দেয়। এখন প্রথম ধাপে বর্ণিত strtr
ফাংশন ব্যবহার করে এটিকে আমরা বাংলা ডিজিটে পরিবর্তিত করে নিতে পারি।
আর সার্ভারে যদি PHP intl
এক্সটেনশনটি চালু (Enable) করা থাকে তাহলে NumberFormatter
ক্লাসটি ব্যবহার করা যায়।
$nf = new NumberFormatter("bn", NumberFormatter::DECIMAL); echo $nf->format(123456789.123); // Output: ১২,৩৪,৫৬,৭৮৯.১২৩ echo $nf->format(123456789.1235); // Output: ১২,৩৪,৫৬,৭৮৯.১২৪
৩। নম্বরকে কথায় প্রকাশ করা:
এক ডিজিট এক ডিজিট করে কথায় প্রকাশ করতে হলে strtr
ফাংশনটি এখানেও প্রয়োগ করতে পারি।
$number = 12345; $digit_to_bn_word = array( 'শূন্য ', 'এক ', 'দুই ', 'তিন ', 'চার ', 'পাঁচ ', 'ছয় ', 'সাত ', 'আট ', 'নয় ', ); $output = strtr($number, $digit_to_bn_word); echo $output; // Output // এক দুই তিন চার পাঁচ
এই নিবন্ধটি তৈরিতে যেসব লিংকের সহায়তা নেয়া হয়েছে: