Saturday, June 23, 2012

แปลงตัวเลข เป็น ภาษาไทย [php]

anonymous say : พี่เล็ก เขียน PHP แปลงตัวเลขเป็นภาษาไทยให้หน่อยได้ไหมครับ
พอดีทำใร VB.net แล้วแต่ก็ งง เลยอยากมองในมุม PHP บ้าง
เอาง่ายๆ ไม่เกิน 1-9999 พอครับ
เช่น กรอกตัวเลขลง textbox 123 ลงไป แปลงออกมา จะได้label "หนึ่งร้อยสิบสาม"

ผม say : เอา ใน vb.net มาดู แล้วจะบอก

(ส่วนนี่คือ code ของเขานะ)


Dim num = tbinput.Text
If (num >= 9999 & num = 0) Then
lboutput.Text = "In put Number 1 - 9999 Only"
Else
Dim i As Integer, max As Integer, r As String, n As String, Result As String
num = Trim(Str(Val(num)))
max = Len(num)
For i = 1 To max
r = Choose(((max - i + 1) Mod 6) + 1, "", "", "สิบ", "ร้อย", "พัน")
n = Choose(Mid(num, i, 1) + 1, "ศูนย์", "หนึ่ง", "สอง", "สาม", "สี่", "ห้า", "หก", "เจ็ด", "แปด", "เก้า")
If r = "สิบ" And n = "หนึ่ง" Then n = ""
If n = "หนึ่ง" And r = "" And max <> 1 Then n = "เอ็ด"
If i = 1 And n = "เอ็ด" And max > 1 Then n = "หนึ่ง"
If r = "สิบ" And n = "สอง" Then n = "ยี่"
If r = "" And max - i + 1 > 6 Then r = ""
If n <> "ศูนย์" Then
Result = Result & n & r
End If
Next
lboutput.Text = Result
End If

บอกตรงๆ ผมมองไม่รู้เรื่องหรอก (แต่เหมือน if จะเยอะจัง - -'')
ก็เลยเขียนเป็น php ในแบบ ที่ตัวเองถนัดมากกว่า


 'ล้าน',
    '100000' => 'แสน',
    '10000' => 'หมื่น',
    '1000' => 'พัน',
    '100' => 'ร้อย',
    '10' => 'สิบ',
    '1' => '',
  );

  $num2TH_Word_1 = array(
    '1' => 'หนึ่ง',
    '2' => 'สอง',
    '3' => 'สาม',
    '4' => 'สี่',
    '5' => 'ห้า',
    '6' => 'หก',
    '7' => 'เจ็ด',
    '8' => 'แปด',
    '9' => 'เก้า',
  );

  $num2TH_Word_2 = array(
    '1' => 'เอ็ด',
    '2' => 'ยี่',
  );

  foreach($num2TH_Word as $x=>$y){
    $tmp = floor($input/$x);
    if($tmp>=1){
      if(($tmp==1) && ($x==10))$return .= $y;
      elseif(($tmp==2) && ($x==10))$return .= $num2TH_Word_2[($input/$x)].$y;
      elseif(($input==1) && ($x==1))$return .= $num2TH_Word_2[($input/$x)];
      else $return .= $num2TH_Word_1[($input/$x)].$y;
      $input = ($input%$x);
    }
  }
  return $return;
}

function is_valid_num($num){
  return is_numeric($num) && ($num >= 0) && (floor($num) == $num);
}

?>


ผลลัพท์ ก็
http://localhost/php.php?num=5121221
ห้าล้านหนึ่งแสนสองหมื่นหนึ่งพันสองร้อยยี่สิบเอ็ด

No comments:

Why You Don't LIKE My FaceBook Fanpage ?
×
blogger