[BÀI 12] THAO TÁC VỚI CHUỖI TRONG PHP
Vì sao chúng ta cần xử lý chuỗi: Trong một trang web phần lớn dữ liệu được hiển thị ở dạng văn bản (hay dạng chuỗi), do vậy nếu không nắm rõ được hay không xử lý được chuỗi trong PHP là một khiếm khuyết lớn.Để gạt đi khiếm khuyết này, ngay dưới đây là một số hàm mà PHP đã dựng sẵn, đó là những ...
Vì sao chúng ta cần xử lý chuỗi:
Trong một trang web phần lớn dữ liệu được hiển thị ở dạng văn bản (hay dạng chuỗi), do vậy nếu không nắm rõ được hay không xử lý được chuỗi trong PHP là một khiếm khuyết lớn.Để gạt đi khiếm khuyết này, ngay dưới đây là một số hàm mà PHP đã dựng sẵn, đó là những hàm xử lý chuỗi thông dụng nhất mà chúng ta cần nắm được.
Nối chuỗi:
- Các dạng mã hóa (hash code) hiện nay là sự cắt ghép từ nhiều thuật toán khác nhau, việc ghép nhiều chuỗi đã được mã hóa lại làm cho dữ liệu an toàn hơn, như là việc mã hóa mật khẩu, các dạng token,…
- Trong trường hợp cần nối hai (hay nhiều chuỗi) lại với nhau chúng ta sử dụng dấu chấm ‘.’ để nối các chuỗi.
- Ví dụ:
1 2 3 4 5 6 7 8 9 |
<?php $chuoi1 = "Devpro"; $chuoi2 = "đào tạo lập trình viên chuyên nghiệp"; //nối $chuoi1 và $chuoi2 bằng dấu chấm '.' $chuoi3 = $chuoi1." ".$chuoi2; //in chuỗi 3 ra màn hình: echo $chuoi3; //kết quả: Devpro đào tạo lập trình viên chuyên nghiệp ?> |
Ở ví dụ này: tôi đã nối 3 chuỗi lại với nhau bằng 2 dấu chấm, chuỗi đầu tiên là $chuoi1 , chuỗi thứ 2 là giấu cách =, và chuỗi thứ 3 là $chuoi2. Kết quả sẽ tạo nên được 1 câu hoàn chỉnh như ở trên.
Tìm độ dài của một chuỗi – hàm strlen()
- Ứng dụng dễ quan sát nhất của hàm này là kiểm tra độ dài của mật khẩu. Vì lý do bảo mật, các lập trình viên thường yêu cầu mật khẩu đăng nhập không được quá ngắn. Thông thường độ dài tối thiểu được yêu cầu là 6 ký tự. Để làm được điều này, đơn giản chúng ta chỉ cần sử dụng hàm strlen()
- Khi sử dụng hàm strlen() , kết quả trả về sẽ là tổng số ký tự có trong chuỗi vừa kiểm tra (bao gồm cả dấu cách – khoảng trắng)
- Ví dụ:
1 2 3 4 5 6 |
echo strlen("123456");//kết quả sẽ in ra màn hình là 6 ký tự //thử một chuỗi khác có dấu cách và là tiếng Việt có dấu: echo strlen("PHP là ngôn ngữ rất phổ biến");//kết quả trả về là 38 ký tự //cùng chuỗi trên nhưng thử bằng tiếng Việt không dấu: echo strlen("PHP la ngon ngu rat pho bien");//kết quả trả về 28 ký tự |
Việc đếm số ký tự là tiếng Việt có dấu sẽ cho ra kết quả nhiều ký tự hơn so với các ký tự là tiếng Việt không dấu. Chẳng hạn:
1 2 3 4 5 |
<?php echo strlen("a");//kết quả in ra là 1 ký tự echo strlen("â");//kết quả in ra là 2 ký tự echo strlen("ầ");//kết quả in ra là 3 ký tự ?> |
Cùng nhìn lại và bạn sẽ thấy rằng, chữ â bạn đã gõ là “aa”, và chữ “ầ” bạn đã gõ là “aaf”, hàm strlen() đã đếm các ký tự này và cho ra kết quả khác nhau mặc dù bạn sẽ nhầm tưởng rằng a – â – ầ vẫn chỉ là 1 ký tự.
Tìm ký tự hoặc chuỗi trong chuỗi – hàm strpos()
Hàm này được sử dụng khi bạn muốn tìm trong chuỗi nào đó một từ (cụm từ hay ký tự nào đấy), khi chúng ta tìm kiếm trên google , google cũng đã làm điều tương tự. Và sử dụng hàm strpos() , bạn đã 1 bước gần đến với sự tìm kiếm thông minh giống google vậy.
- Nếu tìm thấy các từ (ký tự,…) cần tìm kiếm trong chuỗi, hàm strpos() sẽ trả về vị trí đầu tiên xuất hiện của từ khóa cần tìm, ngược lại không trả về gì hết (null)
- Ví dụ:
1 2 3 4 5 6 7 8 9 10 11 |
<?php $tu_khoa_1 = "mùa đông"; $tu_khoa_2 = "mùa xuân"; $chuoi_can_kiem_tra="nắng mùa xuân ấm áp nhưng cũng dễ chịu"; //tìm xem từ mùa đông có trong chuỗi cần kiểm tra hay không: echo strpos($chuoi_can_kiem_tra,$tu_khoa_1); //kết quả không tìm thấy //tìm xem từ mùa xuâncó trong chuỗi cần kiểm tra hay không: echo strpos($chuoi_can_kiem_tra,$tu_khoa_2); //kết quả sẽ in ra vị trí đầu tiên mà từ khóa xuất hiện là vị trí thứ 7 ?> |
Khi tìm từ mùa xuân, bạn sẽ thắc mắc tại sao vị trí xuất hiện đầu tiên là vị trí thứ 7. Giống hàm strlen() ở trên, hàm strpos() cũng đếm các ký tự tiếng Việt có dấu (nhiều ký tự hơn các ký tự tiếng Việt không dấu), khi sử dụng hàm strpos() vị trí đầu tiên của chuỗi được đánh số là 0, do vậy chữ m trong mùa xuân ở vị trí thứ 7.
Hàm str_word_count($string , $format , $charlist) : đếm tổng số từ có trong chuỗi
- string: chỉ định chuỗi để kiểm tra
- format: chỉ định kiểu giá trị trả về của hàm str_word_count(). Các giá trị này có thể là:
- 0 – Mặc định – trả về số lượng từ đếm được
- 1 – Trả về một mảng chứa các từ trong chuỗi
- 2 – Trả về một mảng với key là vị trí của từ trong chuỗi và value là từ trong chuỗi
- charlist: chỉ định các ký tự đặc biệt sẽ được xem như một từ trong chuỗi
1 2 3 4 5 |
<?php echo (str_word_count("Hello world!",0));//đếm được 2 từ print_r(str_word_count("Hello world!",1));//trả về một mảng có 2 từ: ?> |
Một số hàm cơ bản khác:
Hàm strtoupper(string): đổi chữ thường thành hoa.
Hàm strtolower(string): đổi chữ hoa thành thường.
Hàm ucfirst(string): đổi chữ in ký tự đầu tiên của chuỗi.
Hàm ucwords(string): đổi chữ in ký tự đầu tiên của mỗi từ trong chuỗi.
Hàm trim($string, $character); Xóa ký tự $character nằm ở đầu và cuối chuỗi $str, nếu ta không nhập $character thì mặc định nó hiểu là xóa khoảng trắng.
Hàm ltrim($string, $character): Tương tự như trim nhưng chỉ xóa bên trái
Hàm rtrim($string, $character): Tương tự như trim nhưng chỉ xóa bên phải
Hàm tìm kiếm và thay thế chuỗi
Hàm substr( string $string , int $start [, int $length ] ): cắt ra một phần của chuỗi từ vị trí start một đoạn được chỉ định bằng tham số length
- string: chuỗi nhập vào đẻ cắt ra chuỗi con
- start: nếu start là một số dương, chuỗi được trả về sẽ bắt đầu từ vị trí start (ký tự đầu tiên của chuỗi được tính là 0). Nếu start là một số âm chuỗi con trả về sẽ được cắt từ vị trí start tính từ cuối chuỗi.
- length: độ dài của chuỗi trả về. Mặc định length được tính đến cuối chuỗi
- length>0: độ dài của chuỗi trả về được tính từ đầu chuỗi
- length<0: độ dài của chuỗi trả về được tính từ cuối chuỗi
Hàm explode($delimiter, $string): chuyển một chuỗi thành một mảng các phần tử với ký tự tách mảng được xác định trước.
- Trong đó: $delimiter là ký tự (chuỗi) dùng để tách mảng
- $tring là chuỗi muốn tách
- Ví dụ dưới đây sẽ dùng dấu cách (khoảng trắng) để tách 1 chuỗi thành 1 mảng
1 2 3 4 5 |
$string = "Đây là khóa học lập trình PHP cơ bản"; // tách chuỗi trên thành 1 mảng: print_r(explode(' ', $string)); //kết quả sẽ in ra dòng sau: //Array ( [0] => Đây [1] => là [2] => khóa [3] => học [4] => lập [5] => trình [6] => PHP [7] => cơ [8] => bản ) |
Hàm implode($delimiter, $piecesarray)
Ngược với hàm explode() , hàm implode() lại dùng để chuyển 1 mảng thành 1 chuỗi, chuỗi này được ngăn cách bằng ký tự được xác định trước
- Trong đó: $delimiter là ký tự (chuỗi) để nối
- $piecesarray là mảng muốn chuyển thành chuỗi
Ví dụ dưới đây sẽ chuyển lại mảng Array ( [0] => Đây [1] => là [2] => khóa [3] => học [4] => lập [5] => trình [6] => PHP [7] => cơ [8] => bản ) về thành 1 chuỗi được ngăn cách nhau bởi dấu cộng:
1 2 3 4 5 6 7 8 9 |
<?php //lấy lại ví dụ trên: $string = "Đây là khóa học lập trình PHP cơ bản"; // tách chuỗi trên thành 1 mảng: $array = (explode(' ', $string)); //bây giờ lại gộp mảng trên thành 1 chuỗi ngăn cách bằng ký tự dấu cộng '+' echo implode("+", $array); //và đây là chuỗi mà chúng ta vừa gộp: Đây+là+khóa+học+lập+trình+PHP+cơ+bản ?> |
Hàm strstr( $string, $needle)
Tách một chuỗi bắt đầu từ $needle cho đến hết chuỗi $string
1 2 3 4 5 6 |
<?php $website = 'http://devpro.edu.vn'; $domain = strstr($website, '.'); echo $domain; //kết quả sẽ in ra tên miền là: ".edu.vn" ?> |
ord ( $string )
Hàm này trả về mã ASCII của ký tự đầu tiên trong chuỗi $string.
1 2 3 4 5 6 7 8 |
<?php echo ord("PHP là ngôn ngữ rất phổ biến"); //cho về kết quả là 80 (là mã của chữ P hoa) echo ord("P"); //cũng cho về kết quả là 80 (là mã của chữ P hoa) echo ord("p"); //cũng cho về kết quả là 112 (là mã của chữ p thường) ?> |
str_repeat( $string, $n )
Hàm này sẽ lặp chuỗi $string n lần, trong đó $n là số nguyên dương, trong trường hợp bạn ghi $n <0 , sẽ xảy ra lỗi
Ví dụ tôi muốn in chữ xin chào 2 lần, tôi làm như sau:
1 2 3 4 |
<?php echo str_repeat( 'Xin chào', 2 ); //kết quả: "xin chàoxin chào" ?> |
str_replace( $chuoi_can_tim, $chuoi_thay_the, $chuoi_ban_dau )
Hàm này sẽ tìm kiếm và thay thế chuỗi giống như Ctrl+h vậy
1 2 3 4 |
$chuoi_can_tim = "..."; $chuoi_thay_the = "ios"; $chuoi_ban_dau = "Devpro đào tạo lập trình viên PHP, android, ...."; echo str_replace( $chuoi_can_tim, $chuoi_thay_the, $chuoi_ban_dau ); |
Một số hàm mã hóa:
- Hàm md5($chuoi_can_ma_hoa) : hàm này sẽ chuyển chuỗi ban đầu thành 1 chuỗi mới có 32 ký tự
- Hàm sha1($chuoi_can_ma_hoa): cũng là mã hóa nhưng hàm này sẽ chuyển chuỗi ban đầu thành 1 chuỗi mới có 40 ký tự
1 2 3 4 |
//mã hóa dạng md5 echo md5("123");//kết quả: 202cb962ac59075b964b07152d234b70 //mã hóa dạng sha1 echo sha1("123");//kết quả: 40bd001563085fc35165329ea1ff5c5ecbdbbeef |
htmlentities($str)
Hàm này sẽ in ra ký tự đặc biệt trong html
- Thông thường các ký tự đặc biệt trong html sẽ không được in ra màn hình, do vậy để in được các ký tự này ra màn hình cần dùng đến hàm htmlentitis()
1 2 3 4 5 6 7 8 9 |
<?php $html = "<h1>h1 là thẻ header</h1>"; //thử in ra màn hình: echo $html; // kết quả: h1 là thẻ header //sử dụng hàm sau và sự khác biệt sẽ xảy ra: echo htmlentities($html); //kết quả: <h1>h1 là thẻ header</h1> ?> |
substr( $string, $start, $length )
Hàm này sẽ cắt chuỗi cũ thành 1 chuỗi mới, trong đó:
- $string : là chuỗi ban đầu
- $start : là vị trí bắt đầu cắt
- $length : số lượng ký tự cần cắt
1 2 3 4 |
<?php echo substr( 'Devpro.edu.vn', 0, 6); //kết quả: Devpro ?> |
Cần lưu ý: vị trí đầu tiên của chuỗi là vị trí 0
strstr( $string, $ky_tu_bat_dau )
Hàm này sẽ cắt chuỗi cũ thành 1 chuỗi mới từ vị trí bắt đầu đến hết chuỗi, trong đó:
- $string là chuỗi ban đầu
- $ky_tu_bat_dau là ký tự bắt đầu cắt
1 2 3 4 |
<?php echo strstr("Hà nội là thủ đô của Việt Nam", "thủ" ); //kết quả: "thủ đô của Việt Nam" ?> |