PHP-তে বাংলা নাম্বার নিয়ে কাজ করা

সর্বশেষ আপডেট:

কিছুদিন আগে আমাদের অফিসে ব্যবহারের জন্য 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
// এক দুই তিন চার পাঁচ

এই নিবন্ধটি তৈরিতে যেসব লিংকের সহায়তা নেয়া হয়েছে:

শেয়ার, কমেন্ট, মেইল বা প্রিন্ট করুন

Leave a Reply