Các hàm PHP dùng để tách họ tên người tiếng Việt (v1.2)

Đây là các hàm PHP tôi thường sử dụng để thao tác với họ tên người tiếng Việt.

Tiền tố vnn trong tên hàm là viết tắt cho từ vietnamese names.

Các function trong file dưới đây là độc lập, nó không cần require đến file .php khác để hoạt động.

Khi thao tác file này yêu cầu ngoài bản thân nó, còn có require đến file xử lý chuỗi tiếng Việt để chạy.

Mã tổng hợp (phần giải thích cho từng function có ở phần sau mã tổng hợp):

<?php

/* 
 * PHP functions used to split Vietnamese names v1.2
 * MIT License
 * Nguyen Duc Anh - freehost.page
 */



////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////



function vnn_word_count($str) { // số lượng từ của chuỗi
    $str2 = vn_rmv_wsp($str); // xóa khoảng trắng dư thừa
    $word = mb_split(' ', $str2); // tách chuỗi
    $rs = count($word); // so tu

return $rs;
}



////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////



function vnn_first_word($str) { // lấy từ đầu tiên của chuỗi họ tên
    $str2 = vn_rmv_wsp($str); // xóa khoảng trắng dư thừa
    $word = mb_split(' ', $str2); // tách từ dựa trên khoảng trắng
    $rs = $word[0]; // lấy từ đầu tiên trong mảng

return $rs;
}



////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////



function vnn_end_word($str) { // từ cuối cùng của chuỗi họ tên
    $rs = NULL; // cái này cũng giúp kiểm tra chuỗi có ít nhất 2 từ hay không
    //nếu chỉ có một từ, nó sẽ trả về kết quả NULL
    $str2 = vn_rmv_wsp($str); // loại bỏ khoảng trắng dư thừa 
    $word = mb_split(' ', $str2); // tách từ
    $n = count($word)-1; // lấy vị trí mảng của từ cuối cùng
    if ($n > 0) {$rs = $word[$n];} // lấy từ cuối cùng

return $rs;
}



////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////



function vnn_2p_word($str) { // từ thứ 2 trong chuỗi, nó sẽ khác từ cuối 
    $rs = NULL; // cái này có thể được dùng để xác định một tên có đệm hay là không
    $str2 = vn_rmv_wsp($str); // loại bỏ khoảng trắng dư thừa
    $word = mb_split(' ', $str2); // tách từ
    $n = count($word); // đếm số lượng từ
    if ($n > 2) {$rs = $word[1];} // nếu họ tên có 2 từ, nó sẽ trả về NULL

return $rs;
}



////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////



function vnn_3p_word($str) { // từ thứ 3 trong chuỗi, nó sẽ khác từ cuối 
    $rs = NULL; // cái này có thể được dùng để xác định một tên có đệm thứ 2 hay là không
    $str2 = vn_rmv_wsp($str); // loại bỏ khoảng trắng dư thừa
    $word = mb_split(' ', $str2); // tách từ
    $n = count($word); // đếm số lượng từ
    if ($n > 3) {$rs = $word[2];} // nếu họ tên có dưới 4 từ, nó sẽ trả về NULL

return $rs;
}



////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////



function vnn_4p_word($str) { // từ thứ 4 trong chuỗi, nó sẽ khác từ cuối 
    $rs = NULL; // cái này có thể được dùng để xác định một tên có đệm thứ 3 hay là không
    $str2 = vn_rmv_wsp($str); // loại bỏ khoảng trắng dư thừa
    $word = mb_split(' ', $str2); // tách từ
    $n = count($word); // đếm số lượng từ
    if ($n > 4) {$rs = $word[3];} // nếu họ tên có dưới 5 từ, nó sẽ trả về NULL

return $rs;
}

/////////////////////////////////////////////////////////////////////// End code

1. Đếm số lượng từ trong tên

function vnn_word_count($str) { // số lượng từ của chuỗi
    $str2 = vnn_rmv_wsp($str); // xóa khoảng trắng dư thừa
    $word = mb_split(' ', $str2); // tách chuỗi
    $rs = count($word); // so tu

return $rs;
}
  • Loại bỏ khoảng trắng dư thừa;
  • Tách từ dựa trên khoảng trắng;
  • Đếm số phần tử trong mảng tách được trả về;

Ví dụ:

$str = " Nguyễn   Đức Anh";
echo vnn_word_count($str);

// kết quả: 3

2. Lấy từ đầu tiên trong họ tên (thường có vai trò là họ)

function vnn_first_word($str) { // lấy từ đầu tiên của chuỗi họ tên
    $str2 = vnn_rmv_wsp($str); // xóa khoảng trắng dư thừa
    $word = mb_split(' ', $str2); // tách từ dựa trên khoảng trắng
    $rs = $word[0]; // lấy từ đầu tiên trong mảng

return $rs;
}
  • Loại bỏ khoảng trắng dư thừa;
  • Tách tử dựa trên khoảng trắng;
  • Lấy phần tử đầu tiên trong mảng;

Ví dụ:

$str = " Nguyễn   Đức Anh";
echo vnn_first_word($str);

// kết quả: Nguyễn

3. Lấy từ cuối cùng trong họ tên (thường có vai trò tên)

Nếu họ tên chỉ có một từ, nó sẽ trả về kết quả NULL.

function vnn_end_word($str) { // từ cuối cùng của chuỗi họ tên
    $rs = NULL; // cái này cũng giúp kiểm tra chuỗi có ít nhất 2 từ hay không
    //nếu chỉ có một từ, nó sẽ trả về kết quả NULL
    $str2 = vnn_rmv_wsp($str); // loại bỏ khoảng trắng dư thừa 
    $word = mb_split(' ', $str2); // tách từ
    $n = count($word)-1; // lấy vị trí mảng của từ cuối cùng
    if ($n > 0) {$rs = $word[$n];} // lấy từ cuối cùng

return $rs;
}

Ví dụ:

$str = "Nguyễn Đức  Anh";
echo vnn_end_word($str);

// kết quả: Anh

4. Lấy các từ khác trong họ tên nếu nó có

Lấy các đệm từ đệm đầu tiên (từ thứ 2), đệm thứ hai (từ thứ 3), đệm thứ ba (từ thứ 4). Nếu không có nó sẽ trả về kết quả NULL.

function vnn_2p_word($str) { // từ thứ 2 trong chuỗi, nó sẽ khác từ cuối 
    $rs = NULL; // cái này có thể được dùng để xác định một tên có đệm hay là không
    $str2 = vnn_rmv_wsp($str); // loại bỏ khoảng trắng dư thừa
    $word = mb_split(' ', $str2); // tách từ
    $n = count($word); // đếm số lượng từ
    if ($n > 2) {$rs = $word[1];} // nếu họ tên có 2 từ, nó sẽ trả về NULL

return $rs;
}



////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////



function vnn_3p_word($str) { // từ thứ 3 trong chuỗi, nó sẽ khác từ cuối 
    $rs = NULL; // cái này có thể được dùng để xác định một tên có đệm thứ 2 hay là không
    $str2 = vnn_rmv_wsp($str); // loại bỏ khoảng trắng dư thừa
    $word = mb_split(' ', $str2); // tách từ
    $n = count($word); // đếm số lượng từ
    if ($n > 3) {$rs = $word[2];} // nếu họ tên có dưới 4 từ, nó sẽ trả về NULL

return $rs;
}



////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////



function vnn_4p_word($str) { // từ thứ 4 trong chuỗi, nó sẽ khác từ cuối 
    $rs = NULL; // cái này có thể được dùng để xác định một tên có đệm thứ 3 hay là không
    $str2 = vnn_rmv_wsp($str); // loại bỏ khoảng trắng dư thừa
    $word = mb_split(' ', $str2); // tách từ
    $n = count($word); // đếm số lượng từ
    if ($n > 4) {$rs = $word[3];} // nếu họ tên có dưới 5 từ, nó sẽ trả về NULL

return $rs;
}

Leave a Comment