Kiểu chuỗi ký tự (string) trong PHP

    0

    Chuỗi ký tự (string) là loại cấu trúc dữ liệu quen thuộc có mặt trong gần như mọi ngôn ngữ lập trình. Kiểu chuỗi ký tự dùng để chứa thông tin về tên người, mật khẩu, địa chỉ, số thẻ ngân hàng, v.v.

    Trên thực tế ngay từ những bài học đầu tiên của bất kỳ ngôn ngữ lập trình nào bạn cũng đều tiếp xúc với chuỗi ký tự qua chương trình Hello world!

    Có thể nói đây là kiểu dữ liệu cơ bản được sử dụng rộng rãi nhất trong PHP.

    PHP cho phép viết giá trị của chuỗi ký tự theo ba cách khác nhau:

    1. Viết các ký tự trong cặp nháy đơn.
    2. Viết các ký tự trong cặp nháy kép.
    3. Viết theo kiểu heredoc.

    Cách viết giá trị của chuỗi được gọi là string literal.

    Viết chuỗi ký tự (string literal) trong PHP với dấu nháy đơn

    Cặp dấu nháy đơn có thể dùng để phân định những gì nằm trong chuỗi. Tất cả những gì nằm giữa cặp dấu này là nội dung của chuỗi.

    Ví dụ:

    $name = 'Donald Trump';
    // sử dụng \' để biểu diễn cho chính ký tự ' trong chuỗi
    $greeting = 'Hello, my name\'s Donald.'; 
    // có thể sử dụng dấu nháy kép trong chuỗi
    $sentence = '"Hello, Donald" - he said';
    // sử dụng \\ để biểu diễn cho \
    $path = 'C:\\PHP\\bin\;
    $php = 'C:\php';
    // có thể viết chuỗi ký tự trải dài trên nhiều dòng
    $people = 'Donald Trump
    Barack Obama
    George Bush
    Bill Clinton';

    Khi sử dụng cặp nháy đơn lưu ý:

    (1) Sử dụng \' để biểu diễn ':

    Do dấu nháy đơn đã được dùng để phân định ranh giới của chuỗi, bên trong chuỗi bạn không được trực tiếp sử dụng ký tự nháy đơn. Nếu cần sử dụng dấu nháy đơn, bạn phải viết \' thay cho '. Đây là tình huống của chuỗi $greeting.

    (2) Sử dụng \\ để biểu diễn \:

    Tình huống 1 cho thấy \ cũng là một ký tự đặc biệt trong chuỗi. Bạn cũng không thể sử dụng trực tiếp \ trong chuỗi, thay vào đó, nếu cần biểu diễn ký tự \, bạn cần viết \\. Đây là tình huống bạn gặp trong chuỗi $path.

    Các cụm ký tự \\\' được gọi là escape sequence (chuỗi thoát). Chỉ có hai escape sequence này sử dụng được với chuỗi trong dấu nháy đơn. Chúng ta sẽ nói kỹ hơn về escape sequence trong phần sau của bài học.

    Với chuỗi trong dấu nháy kép sẽ có thêm một số chuỗi escape sequence khác nữa.

    (3) Sử dụng dấu nháy kép trong chuỗi:

    Bên trong chuỗi có thể sử dụng dấu nháy kép. Dấu nháy kép trong chuỗi này chỉ là một ký tự bình thường. Bạn đã gặp cách sử dụng này trong chuỗi $sentence.

    (4) Viết chuỗi trên nhiều dòng:

    Chuỗi ký tự biểu diễn bằng cặp nháy đơn có thể trải dài trên nhiều dòng như giá trị của biến $people ở trên. Đây là điều rất khác biệt với các ngôn ngữ khác. Nhờ đặc thù này có thể dễ dàng tạo ra các khối văn bản HTML động.

    Viết chuỗi ký tự trong PHP với dấu nháy kép

    Cặp dấu nháy kép được sử dụng tương tự như cặp dấu nháy đơn để phân định ranh giới của chuỗi ký tự. Nhìn chung cách sử dụng cơ bản của cặp nháy kép không khác biệt với cặp nháy đơn.

    Hãy xem ví dụ sau đây:

    <?php
    $name = "Donald Trump";
    // không cần escape ký tự '
    $greeting = "Hello, my name's Donald.";
    // sử dụng \" để biểu diễn "
    $sentence = "\"Hello, Donald\" - he said";
    // sử dụng \\ để biểu diễn \
    $php_path = "C:\\PHP\\bin";
    // tự động bỏ qua \P và \b, coi là \
    $bin_path = "C:\PHP\bin";
    // chuỗi chạy qua nhiều dòng
    $presidents = "Donald Trump
    Barack Obama
    George Bush
    Bill Clinton";

    Ví dụ này chỉ thay cặp dấu nháy đơn bằng nháy kép.

    Tuy nhiên, chuỗi trong cặp nháy kép có hai điểm khác biệt lớn với chuỗi trong cặp nháy đơn:

    • Sử dụng được nhiều escape sequence khác.
    • Có thể sử dụng tên biến trong chuỗi.

    Như ở trên đã nói, chuỗi trong cặp nháy đơn chỉ hỗ trợ hai escape sequence \'\\. Chuỗi trong cặp nháy kép hỗ trợ các escape sequence sau:

    • \” – dấu nháy kép. Dùng để biểu diễn chính dấu nháy kép trong chuỗi.
    • \n – thêm dòng mới.
    • \r – chuyển con trỏ văn bản về đầu dòng.
    • \t – dấu tab.
    • \\ – dấu \.
    • \{, \} – dấu { và }
    • \[, \] – dấu [ và ]
    • \0 đến \777 – các ký tự ascii biểu diễn ở cơ số 8
    • \x0 đến \xff – các ký tự ascii biểu diễn ở cơ số 16.

    Một đặc điểm khá lạ của escape sequence trong PHP nằm ở chỗ, nếu một cụm ký tự bắt đầu bằng \ nhưng không phải là một escape sequence tiêu chuẩn, PHP sẽ tự động bỏ qua sequence này chứ không báo lỗi.

    Lấy ví dụ, trong lệnh $path = "C:\php\bin"; (hoặc 'C:\php\bin') \p\b sẽ không được coi là escape sequence mà chỉ là ký tự \ thông thường. PHP không coi đây là một lỗi. Do vậy, lệnh trên vẫn tạo ra một chuỗi ký tự chính xác!

    Nếu bạn đặt một tên biến trong chuỗi tạo từ cặp nháy kép, PHP sẽ tự động chèn giá trị của biến vào chuỗi. Cơ chế này trong PHP có tên gọi là variable interpolation (nội suy biến).

    $name = "Donald Trump";
    $age = 70;
    $greeting = "Hello, $name. You are $age years old. Welcome to heaven!";
    echo $greeting;

    Kết quả chạy script là

    Hello, Donald Trump. You are 70 years old. Welcome to heaven!

    Đây là cách thức rất tiện lợi để tạo ra chuỗi ký tự động từ biến và biểu thức.

    Nếu không có nhu cầu sử dụng escape sequence hoặc variable interpolation, bạn nên sử dụng chuỗi trong cặp nháy đơn.

    Viết chuỗi ký tự trong PHP theo kiểu Heredoc

    Heredoc là lối viết chuỗi ký tự trên nhiều dòng đặc thù của PHP. Hãy xem ví dụ sau:

    <?php
    $greeting = <<<GREETING
    Hello world!
    This is a long PHP string,
    which is written in multiple lines.
    This type of string is called heredoc in PHP.
    tab\ttab\ttab
    GREETING;
    
    echo $greeting;

    Chạy script trên bạn thu được kết quả như sau:

    E:\OneDrive\TuHocICT\LearnPHP\Basic>php heredoc.php
    Hello world!
    This is a long PHP string,
    which is written in multiple lines.
    This type of string is called heredoc in PHP.
    tab tab tab

    Nếu sử dụng interactive shell thì kết quả như sau:

    E:\OneDrive\TuHocICT\LearnPHP\Basic>php -a
    Interactive shell
    
    php > $greeting = <<<GREETING
    <<< > Hello world!
    <<< > This is a long PHP string,
    <<< > which is written in multiple lines.
    <<< > This type of strings is called heredoc in PHP.
    <<< > GREETING;
    php > echo $greeting;
    Hello world!
    This is a long PHP string,
    which is written in multiple lines.
    This type of strings is called heredoc in PHP.
    php >

    Trong cách viết heredoc chú ý: sau <<< sẽ là cụm ký tự đánh dấu. Trong ví dụ trên cụm ký tự đánh dấu là GREETING.

    Cụm đánh dấu có tác dụng báo nơi bắt đầu và kết thúc của chuỗi heredoc. Tất cả những dòng văn bản nằm giữa hai cụm ký tự đánh dấu sẽ là nội dung của chuỗi.

    Trong chuỗi heredoc bạn có thể sử dụng dấu nháy đơn ‘ và dấu nháy kép ” vì ở đây chúng không còn tác dụng phân định chuỗi nữa.

    Bên trong chuỗi heredoc có thể sử dụng các escape sequencevariable interpolation giống như trường hợp chuỗi trong cặp nháy kép.

    Các phép toán trên chuỗi ký tự

    PHP cung cấp các phép toán sau trên kiểu chuỗi.

    Truy xuất ký tự của chuỗi, phép toán []

    Sử dụng phép toán [] để truy xuất từng ký tự trong chuỗi.

    php > $name = 'Donald';
    php > echo $name[0],' ',$name[1],' ',$name[2];
    D o n
    php >

    Chú ý, ký tự đầu tiên của chuỗi (nếu chuỗi không rỗng) sẽ có chỉ số (index) bằng 0.

    Nếu chuỗi không chứa bất kỳ ký tự nào thì nó được gọi là chuỗi rỗng. Ký hiệu chuỗi rỗng là ” hoặc “” (chỉ có cặp dấu nháy đơn hoặc cặp dấu nháy kép).

    Khi truy xuất phần tử của chuỗi rỗng sẽ gặp thông báo Notice: Uninitialized string offset: 0.

    Phép ghép xâu

    PHP cung cấp phép toán . để ghép các xâu con thành một xâu lớn. Hãy xem ví dụ sau:

    php > $str1 = 'Hello';
    php > $str2 = 'world';
    php > $str = $str1.' '.$str2;
    php > echo $str;
    Hello world
    php >

    PHP cũng tạo ra phiên bản phép gán tương ứng của phép ghép xâu:

    php > $str = 'Hello';
    php > $str .= ' world'; // tương đương $str = $str . ' world';
    php > echo $str;
    Hello world
    php >

    Phép gán $str .= ' world'; tương đương với $str = $str . ' world';.

    Các phép so sánh

    PHP hỗ trợ đầy đủ các phép so sánh trên các chuỗi ký tự, tương tự như đối với kiểu số.

    Phép toánÝ nghĩa
    <Nhỏ hơn
    <=Nhỏ hơn hoặc bằng
    >Lớn hơn
    >=Lớn hơn hoặc bằng
    ==So sánh bằng
    !=So sánh khác
    <>So sánh khác
    <=>Phép so sánh spaceship

    Có thể để ý PHP có hai phép toán so sánh khác != và <>. Hai phép toán này không có gì khác biệt nhau.

    Phép so sánh spaceship không trả lại kết quả logic true/false mà trả về kết quả số nguyên: -1 nếu vế trái nhỏ hơn; +1 nếu vế trái lớn hơn; 0 nếu hai vế bằng nhau.

    Các phép so sánh bằng và khác trong PHP có thể áp dụng với hai vế thuộc hai kiểu khác nhau! Ví dụ, có thể so sánh chuỗi với số! Ngoài các phép so sánh trên trong PHP còn có các phép toán so sánh tương tự ===, !==.

    Chúng ta sẽ xem xét kỹ hơn về các phép toán so sánh trong bài học về kiểu boolean.

    Một số hàm xử lý chuỗi ký tự trong PHP

    PHP cung cấp khá nhiều hàm xử lý chuỗi ký tự. Sau đây chúng ta sẽ xem xét những hàm cơ bản và thông dụng.

    Xác định độ dài chuỗi

    Sử dụng hàm strlen() để xác định số lượng ký tự (độ dài) chuỗi:

    php > $name = "Donald";
    php > echo strlen($name);
    6
    php >

    Xóa ký tự trống

    Xóa ký tự trống là một bước trong quá trình chuẩn hóa xâu ký tự trước khi xử lý. PHP tự động coi dấu cách, dấu tab \t, ký tự xuống dòng \n, ký tự chuyển về đầu dòng \r, NUL-byte \0, dấu tab đứng \x0B là ký tự trống.

    PHP cung cấp các hàm trim(), ltrim(), rtrim() để xóa ký tự trống trong chuỗi, trong đó:

    • ltrim() xóa ký tự trống ở đầu chuỗi;
    • rtrim() xóa ký tự trống ở cuối chuỗi;
    • trim() xóa ở cả đầu và cuối chuỗi.
    php > $name = '   Donald   ';
    php > echo $name;
       Donald
    php > echo trim($name);
    Donald
    php >

    Các hàm này nhận tham số thứ hai (không bắt buộc) là chuỗi chứa các ký tự cần xóa (nếu gặp ở đầu/cuối chuỗi):

    php > $name ='aaDonaldbb';
    php > echo trim($name, 'ab');
    Donald
    php >

    Chuyển đổi hoa/thường

    PHP cung cấp các hàm chuyển đổi hoa thường sau: strtolower(), strtoupper(), ucfirst(), ucwords().

    php > $str = 'Hello world from PHP';
    php > echo strtoupper($str); // viết hoa toàn bộ chuỗi
    HELLO WORLD FROM PHP
    php > echo strtolower($str); // viết thường toàn bộ chuỗi
    hello world from php
    php > echo ucfirst($str); // viết hoa chữ cái đầu tiên
    Hello world from PHP
    php > echo ucwords($str); // viết hoa chữ cái đầu của từng từ trong câu
    Hello World From PHP
    php >

    Trích chuỗi con

    Có thể trích một phần của chuỗi ra một biến mới bằng hàm substr():

    $str = substr(string, start [, length]);

    Trong đó: start là vị trí bắt đầu lấy, length là số ký tự cần lấy. Hàm substr() không làm thay đổi xâu gốc.

    php > $name = 'Donald Trump';
    php > $fname = substr($name, 0, 6); // trích từ chỉ số 0, lấy 6 ký tự
    php > echo $fname;
    Donald
    php > $lname = substr($name, 7); // trích từ chỉ số 7
    php > echo $lname;
    Trump
    php >
    

    Tìm kiếm trong chuỗi

    Tìm-và-thay-thế là yêu cầu rất thường gặp trong xử lý văn bản. PHP cung cấp hàm strpos() để xác định vị trí của một xâu con trong một xâu khác: function strpos ($haystack, $needle, $offset = 0) false|int

    php > $str = 'Hello world, Donald! Welcome to heaven';
    php > echo strpos($str, 'Donald');
    13
    php > echo strpos($str, 'donald');
    php >

    Hàm strpos() trả lại vị trí đầu tiên mà xâu con xuất hiện trong xâu lớn. Ở ví dụ trên, xâu ‘Donald’ xuất hiện ở vị trí số 13 trong xâu lớn $str.

    Nếu không tìm thấy xâu con, strpost trả lại false (dưới dạng một xâu trống).

    Một cách khác để tìm kiếm trong chuỗi là sử dụng hàm substr_count(): function substr_count ($haystack, $needle, $offset = null, $length = null) int

    Hàm này trả lại số lần bắt gặp một chuỗi con $needle trong chuỗi lớn $haystack. Hãy xem ví dụ sau:

    php > $big_str = 'PHP programming for .NET programmer';
    php > echo substr_count($big_str, 'program');
    2
    php >
    

    Trong ví dụ trên, chuỗi con ‘program’ xuất hiện hai lần trong chuỗi lớn $big_str.

    Thay thế văn bản trong chuỗi

    PHP cung cấp hàm str_replace() cho công việc này. Hãy xem cách sử dụng hàm str_replace() qua ví dụ dưới đây:

    php > $greeting = 'Hello Donald. Welcome to heaven';
    php > $obama_greeting = str_replace('Donald', 'Obama', $greeting);
    php > echo $obama_greeting;
    Hello Obama. Welcome to heaven
    php >
    

    Cú pháp của str_replace() như sau:

    function str_replace ($search, $replace, $subject, &$count = null) string|string[]

    Theo đó, 3 tham số bắt buộc là: $search – chuỗi cần tìm (để thay thế), $replace – chuỗi thay thế, $subject – chuỗi nguồn. Kết quả trả về là một chuỗi mới trong đó $replace đã thay thế cho $search.

    Kết luận

    Trong bài học này chúng ta đã xem xét chi tiết cách làm việc với chuỗi ký tự trong PHP.

    • PHP cho phép biểu diễn chuỗi ký tự bên trong cặp nháy đơn, cặp nháy kép, và lối viết heredoc.
    • Lối viết nháy đơn và nháy kép khác biệt ở khả năng sử dụng escape sequence và nội suy giá trị biến.
    • Lối viết nháy kép và heredoc có thể sử dụng tất cả escape sequence và khả năng nội suy giá trị biến.
    • PHP cung cấp nhiều hàm để xử lý chuỗi.

    + Nếu bạn thấy site hữu ích, trước khi rời đi hãy giúp đỡ site bằng một hành động nhỏ để site có thể phát triển và phục vụ bạn tốt hơn.
    + Nếu bạn thấy bài viết hữu ích, hãy giúp chia sẻ tới mọi người.
    + Nếu có thắc mắc hoặc cần trao đổi thêm, mời bạn viết trong phần thảo luận cuối trang.
    Cảm ơn bạn!

    Subscribe
    Notify of
    guest
    0 Thảo luận
    Inline Feedbacks
    View all comments