พอดีทำใร 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:
Post a Comment