PHP function แสดงค่าเงินบาทเป็นภาษาไทย

8 มิถุนายน 2567 เวลาอ่าน 3 นาที
PHP function แสดงค่าเงินบาทเป็นภาษาไทย

PHP function สำหรับแสดงเงินบาทเป็นภาษาไทย

ตัวอย่างการใช้งาน

<?php 
baht_text(123456);
// หนึ่งแสนสองหมื่นสามพันสี่ร้อยห้าสิบหกบาทถ้วน

baht_text(123456, include_unit: false) 
// หนึ่งแสนสองหมื่นสามพันสี่ร้อยห้าสิบหก

baht_text(123456.75) 
// หนึ่งแสนสองหมื่นสามพันสี่ร้อยห้าสิบหกบาทเจ็ดสิบห้าสตางค์

baht_text(123456, include_unit: false)
// หนึ่งแสนสองหมื่นสามพันสี่ร้อยห้าสิบหกจุดเจ็ดห้า
?>

Code Snippet

function baht_text($number, $include_unit = true, $display_zero = true): ?string
{
    if (!is_numeric($number)) {
        return null;
    }

    $BAHT_TEXT_NUMBERS = ['ศูนย์', 'หนึ่ง', 'สอง', 'สาม', 'สี่', 'ห้า', 'หก', 'เจ็ด', 'แปด', 'เก้า'];
    $BAHT_TEXT_UNITS = ['', 'สิบ', 'ร้อย', 'พัน', 'หมื่น', 'แสน', 'ล้าน'];
    $BAHT_TEXT_ONE_IN_TENTH = 'เอ็ด';
    $BAHT_TEXT_TWENTY = 'ยี่';
    $BAHT_TEXT_INTEGER = 'ถ้วน';
    $BAHT_TEXT_BAHT = 'บาท';
    $BAHT_TEXT_SATANG = 'สตางค์';
    $BAHT_TEXT_POINT = 'จุด';

    $log = floor(log($number, 10));
    if ($log > 5) {
        $millions = floor($log / 6);
        $million_value = pow(1000000, $millions);
        $normalised_million = floor($number / $million_value);
        $rest = $number - ($normalised_million * $million_value);
        $millions_text = str_repeat($BAHT_TEXT_UNITS[6], $millions);
        return baht_text($normalised_million, false) . $millions_text . baht_text($rest, true, false);
    }

    $number_str = (string)floor($number);
    $text = '';
    $unit = 0;

    if ($display_zero && $number_str == '0') {
        $text = $BAHT_TEXT_NUMBERS[0];
    } else {
        for ($i = strlen($number_str) - 1; $i > -1; $i--) {
            $current_number = (int)$number_str[$i];

            $unit_text = '';
            if ($unit == 0 && $i > 0) {
                $previous_number = isset($number_str[$i - 1]) ? (int)$number_str[$i - 1] : 0;
                if ($current_number == 1 && $previous_number > 0) {
                    $unit_text .= $BAHT_TEXT_ONE_IN_TENTH;
                } else {
                    if ($current_number > 0) {
                        $unit_text .= $BAHT_TEXT_NUMBERS[$current_number];
                    }
                }
            } else {
                if ($unit == 1 && $current_number == 2) {
                    $unit_text .= $BAHT_TEXT_TWENTY;
                } else {
                    if ($current_number > 0 && ($unit != 1 || $current_number != 1)) {
                        $unit_text .= $BAHT_TEXT_NUMBERS[$current_number];
                    }
                }
            }

            if ($current_number > 0) {
                $unit_text .= $BAHT_TEXT_UNITS[$unit];
            }

            $text = $unit_text . $text;
            $unit++;
        }
    }

    if ($include_unit) {
        $text .= $BAHT_TEXT_BAHT;

        $satang = explode('.', number_format($number, 2, '.', ''))[1];
        $text .= $satang == 0
            ? $BAHT_TEXT_INTEGER
            : baht_text($satang, false) . $BAHT_TEXT_SATANG;
    } else {
        $exploded = explode('.', $number);
        if (isset($exploded[1])) {
            $text .= $BAHT_TEXT_POINT;
            $decimal = $exploded[1];
            for ($i = 0; $i < strlen($decimal); $i++) {
                $text .= $BAHT_TEXT_NUMBERS[$decimal[$i]];
            }
        }
    }

    return $text;
}

Reference

Github Gist

เรื่องใน
PHP
Phattarachai Chaimongkol

เกี่ยวกับ phattarachai.dev

ผมอ๊อฟนะครับ เป็นผู้ประกอบการอิสระ ที่ปรึกษาทางด้าน Web Application Development ให้แก่องค์กร ธุรกิจ SME และหน่วยงานราชการ
Web Developer ผู้มีใจรักใน Laravel เป็นพาร์ทเนอร์บริษัท Digital Agency ชั้นนำทางด้าน UX/UI เพื่อพัฒนาโปรเจคให้แก่ลูกค้า ผมช่วยสร้างเครื่องมือทางด้าน Web ที่มีคุณภาพให้ผู้ประกอบการดำเนินธุรกิจได้ง่ายขึ้นใช้งานได้จริง เน้นประสบการณ์ ความชำนาญ ผลงานคุ้มค่าเทียบเท่าจ้างงานกับบริษัทใหญ่ ๆ

ยามว่าง ๆ ชอบเล่นเกมส์บน Steam ครับ

เรื่องที่เกี่ยวข้อง

แสดง DatePicker ปี พ.ศ. เป็นภาษาไทย ด้วย FilamentPHP
8 มิถุนายน 2567
แสดง DatePicker ปี พ.ศ. เป็นภาษาไทย ด้วย FilamentPHP
วิธีการเช็ค Detect Browser ผู้ใช้จาก Laravel
8 มิถุนายน 2567
วิธีการเช็ค Detect Browser ผู้ใช้จาก Laravel
แปลงวันที่ภาษาไทย ด้วย thaidate() ใน PHP และ Laravel
8 มิถุนายน 2567
แปลงวันที่ภาษาไทย ด้วย thaidate() ใน PHP และ Laravel