Mình hiện đang làm vài trang rao vặt cho khách hàng, cũng vì nhu cầu cần phải biến đổi các số to đùng sang chữ cho nó ngắn lại / để dễ hiểu hơn, website bất động sản thì số to thôi rồi 😀

Test hàm đọc số tiền
Vì chưa thấy thiên hạ chia sẻ hàm để làm việc này nên tôi phải tự làm, cũng được chả sao, mất toi 1 tiếng lọ mọ cơ mà thú vị, cuối cùng thì tìm được cách tối ưu nhất để đọc cái chuỗi số ấy ra ngoài !
Bước 1: Format lại số
Đầu tiên, ta cho số 32000000000 ( đọc là 32 tỉ ), sau đó ta dùng hàm number_format để băm nó thành nhóm 3 số 1 , ta được 32,000,000,000 => Ngon dần đều
Bước 2: Băm nát dãy số = 3 số một
Dùng hàm sau: explode (‘,’, $num); ta được:
array {
[0] => 32,
[1] => 000,
[2] => 000,
[3] => 000,
}
Haha, ngon dần rồi đấy, có cơ sở để đọc nó, giờ ta tính dùng hàm Count để có thể đếm xem nó là số tỉ hay triệu, ta chỉ cần: count( $array );
Bước 3: Đọc nó
Nếu có 4 array, thì đọc “$array[0]” tỉ, nếu $array[1] đọc tiếp “triệu”, còn lại thích đọc tiếp thì đọc !
Nếu có 3 array, thì đọc “$array[0]” triệu, nếu $array[1] đọc tiếp “ngàn”, còn lại thích đọc tiếp thì đọc !
Sau đây là toàn bộ code, các bạn thích thì lấy về mà dùng cho đỡ mất công viết mới:
function jam_read_num_forvietnamese( $num = false ) {
$str = '';
$num = trim($num);
$arr = str_split($num);
$count = count( $arr );
$f = number_format($num);
//KHÔNG ĐỌC BẤT KÌ SỐ NÀO NHỎ DƯỚI 999 ngàn
if ( $count < 7 ) {
$str = $num;
} else {
// từ 6 số trở lên là triệu, ta sẽ đọc nó !
// "32,000,000,000"
$r = explode(',', $f);
switch ( count ( $r ) ) {
case 4:
$str = $r[0] . ' tỉ';
if ( (int) $r[1] ) { $str .= ' '. $r[1] . ' Tr'; }
break;
case 3:
$str = $r[0] . ' Triệu';
if ( (int) $r[1] ) { $str .= ' '. $r[1] . 'K'; }
break;
}
}
return ( $str . ' ₫' );
}
Chúc các bạn thành công !
cám ơn kiến thức ad