Sắp xếp dữ liệu Tiếng Việt với PHP


Các hàm của PHP hầu hết không hỗ trợ sắp xếp Tiếng Việt nói riêng và các ngôn ngữ loằng ngoằng nói chung. Hoặc nếu có hỗ trợ thì lại đụng chạm nhiều thứ như … hosting không có hỗ trợ…

Em cũng gặp tình huống như vậy nên em phải viết cái hàm sau sử dụng với PHP usort để sắp xếp với Tiếng Việt. Tất nhiên là chỉ sắp xếp trên code thôi chứ không sắp xếp phân trang với SQL đâu nha.

function e_sortcb($a, $b) {
$map = array(
‘Ă’ => ‘Az’,
‘Ằ’ => ‘Azz’,
‘Ắ’ => ‘Azzz’,
‘Ẳ’ => ‘Azzzz’,
‘Ẵ’ => ‘Azzzzz’,
‘Ặ’ => ‘Azzzzzz’,
‘Â’ => ‘Azzzzzzz’,
‘Ầ’ => ‘Azzzzzzz’,
‘Ấ’ => ‘Azzzzzzzz’,
‘Ẩ’ => ‘Azzzzzzzzz’,
‘Ẫ’ => ‘Azzzzzzzzzz’,
‘Ậ’ => ‘Azzzzzzzzzzz’,
‘ă’ => ‘az’,
‘ằ’ => ‘azz’,
‘ắ’ => ‘azzz’,
‘ẳ’ => ‘azzzz’,
‘ẵ’ => ‘azzzzz’,
‘ặ’ => ‘azzzzzz’,
‘â’ => ‘azzzzzzz’,
‘ầ’ => ‘azzzzzzzz’,
‘ấ’ => ‘azzzzzzzzz’,
‘ẩ’ => ‘azzzzzzzzzz’,
‘ẫ’ => ‘azzzzzzzzzzz’,
‘ậ’ => ‘azzzzzzzzzzzz’,
‘Đ’ => ‘Dz’,
‘đ’ => ‘dz’,
‘Ê’ => ‘Ez’,
‘Ề’ => ‘Ezz’,
‘Ế’ => ‘Ezzz’,
‘Ể’ => ‘Ezzzz’,
‘Ễ’ => ‘Ezzzzz’,
‘Ệ’ => ‘Ezzzzzz’,
‘ê’ => ‘ezzzzzzz’,
‘ề’ => ‘ezzzzzzzz’,
‘ê’ => ‘ezzzzzzzzz’,
‘ể’ => ‘ezzzzzzzzzz’,
‘ễ’ => ‘ezzzzzzzzzzz’,
‘ệ’ => ‘ezzzzzzzzzzzz’,
‘Ô’ => ‘Oz’,
‘Ồ’ => ‘Ozz’,
‘Ố’ => ‘Ozzz’,
‘Ổ’ => ‘Ozzzz’,
‘Ỗ’ => ‘Ozzzzz’,
‘Ộ’ => ‘Ozzzzzz’,
‘Ơ’ => ‘Ozzzzzzz’,
‘Ờ’ => ‘Ozzzzzzzz’,
‘Ớ’ => ‘Ozzzzzzzzz’,
‘Ở’ => ‘Ozzzzzzzzz’,
‘Ỡ’ => ‘Ozzzzzzzzzz’,
‘Ợ’ => ‘Ozzzzzzzzzzz’,
‘ô’ => ‘oz’,
‘ồ’ => ‘ozz’,
‘ố’ => ‘ozzz’,
‘ổ’ => ‘ozzzz’,
‘ỗ’ => ‘ozzzzz’,
‘ộ’ => ‘ozzzzzz’,
‘ơ’ => ‘ozzzzzzz’,
‘ờ’ => ‘ozzzzzzzz’,
‘ớ’ => ‘ozzzzzzzzz’,
‘ở’ => ‘ozzzzzzzzzz’,
‘ỡ’ => ‘ozzzzzzzzzzz’,
‘ợ’ => ‘ozzzzzzzzzzzz’,
‘Ư’ => ‘Uz’,
‘Ừ’ => ‘Uzz’,
‘Ứ’ => ‘Uzzz’,
‘Ử’ => ‘Uzzzz’,
‘Ữ’ => ‘Uzzzzz’,
‘Ự’ => ‘Uzzzzzz’,
‘ư’ => ‘uz’,
‘ừ’ => ‘uzz’,
‘ứ’ => ‘uzzz’,
‘ử’ => ‘uzzzz’,
‘ữ’ => ‘uzzzzz’,
‘ự’ => ‘uzzzzzz’,
);
$keys = array_keys($map);
$vals = array_values($map);
$a = str_replace($keys, $vals, $a);
$b = str_replace($keys, $vals, $b);
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}

Dùng hàm này với PHP usort, hoạt động khá tốt.

2 comments

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s