Trong bất kỳ loại lập trình nào, bạn sẽ luôn gặp các tình huống cần so sánh các giá trị với nhau, nếu các giá trị là boolean hoặc số nguyên thì việc so sánh rất đơn giản. Nhưng nếu bạn muốn so sánh các chuỗi hoặc các phần của chuỗi thì có thể so sánh nhiều hơn, chẳng hạn như trường hợp của chuỗi bạn đang so sánh
Trong hướng dẫn này, chúng ta sẽ xem xét tất cả các cách khác nhau để bạn có thể so sánh các chuỗi trong PHP bằng cách sử dụng một số hàm PHP tích hợp
== toán tử
Cách phổ biến nhất mà bạn sẽ thấy khi so sánh hai chuỗi đơn giản là sử dụng toán tử == nếu hai chuỗi bằng nhau thì nó trả về true
if['string1' == 'string1'] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }
Mã này sẽ trả về các chuỗi khớp nhau, nhưng nếu các chuỗi không giống nhau thì nó sẽ không khớp. Nếu tất cả các chữ cái trong một chuỗi đều ở dạng chữ hoa thì điều này sẽ trả về false và các chuỗi không khớp.
if['string1' == 'STRING1'] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }
Điều này có nghĩa là chúng ta không thể sử dụng toán tử == khi so sánh các chuỗi từ đầu vào của người dùng, ngay cả khi chữ cái đầu tiên được viết hoa, nó vẫn trả về false. Vì vậy, chúng ta cần sử dụng một số chức năng khác để giúp so sánh các chuỗi
Hàm strcmp
Một cách khác để so sánh các chuỗi là sử dụng hàm PHP strcmp, đây là hàm so sánh chuỗi an toàn nhị phân sẽ trả về 0 nếu các chuỗi khớp
if[strcmp['string1', 'string1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }
Câu lệnh if này sẽ trả về true và lặp lại rằng các chuỗi khớp với nhau. Nhưng hàm này phân biệt chữ hoa chữ thường nên nếu một trong các chuỗi có chữ hoa thì hàm sẽ không trả về 0
Hàm strcasecmp
Các ví dụ trước sẽ không cho phép bạn so sánh các chuỗi chữ hoa chữ thường khác nhau, hàm sau đây sẽ cho phép bạn so sánh các chuỗi không phân biệt chữ hoa chữ thường
if[strcasecmp['string1', 'string1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; } if[strcasecmp['string1', 'String1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; } if[strcasecmp['string1', 'STRING1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }
Tất cả các câu lệnh if này sẽ trả về các chuỗi khớp nhau, có nghĩa là chúng ta có thể sử dụng hàm này khi so sánh các chuỗi do người dùng nhập vào
Bạn có thể so sánh hai chuỗi bằng nhau với toán tử
$string = "PHP Rocks"; $number = 5; if [$string < $number] { echo["$string < $number"]; } PHP Rocks < 50 và
$string = "PHP Rocks"; $number = 5; if [$string < $number] { echo["$string < $number"]; } PHP Rocks < 51. Các toán tử này khác nhau về cách chúng xử lý các toán hạng không phải chuỗi. Toán tử
$string = "PHP Rocks"; $number = 5; if [$string < $number] { echo["$string < $number"]; } PHP Rocks < 50 chuyển toán hạng không phải chuỗi thành chuỗi, do đó, nó báo cáo rằng
$string = "PHP Rocks"; $number = 5; if [$string < $number] { echo["$string < $number"]; } PHP Rocks < 53 và
$string = "PHP Rocks"; $number = 5; if [$string < $number] { echo["$string < $number"]; } PHP Rocks < 54 bằng nhau. Toán tử
$string = "PHP Rocks"; $number = 5; if [$string < $number] { echo["$string < $number"]; } PHP Rocks < 51 không truyền và trả về
$string = "PHP Rocks"; $number = 5; if [$string < $number] { echo["$string < $number"]; } PHP Rocks < 56 nếu các loại đối số khác nhau
if['string1' == 'STRING1'] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }1
Các toán tử so sánh [
$string = "PHP Rocks"; $number = 5; if [$string < $number] { echo["$string < $number"]; } PHP Rocks < 57,
$string = "PHP Rocks"; $number = 5; if [$string < $number] { echo["$string < $number"]; } PHP Rocks < 58,
$string = "PHP Rocks"; $number = 5; if [$string < $number] { echo["$string < $number"]; } PHP Rocks < 59,
if['string1' == 'STRING1'] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }50] cũng hoạt động trên chuỗi
if['string1' == 'STRING1'] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }6
Tuy nhiên, các toán tử so sánh đưa ra kết quả không mong muốn khi so sánh các chuỗi và số
$string = "PHP Rocks"; $number = 5; if [$string < $number] { echo["$string < $number"]; } PHP Rocks < 5
Khi một đối số cho toán tử so sánh là một số, thì đối số kia được chuyển thành một số. Điều này có nghĩa là
if['string1' == 'STRING1'] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }51 được chuyển thành một số, cho kết quả là
if['string1' == 'STRING1'] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }52 [vì chuỗi không bắt đầu bằng một số]. Bởi vì 0 nhỏ hơn 5, PHP in
if['string1' == 'STRING1'] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }53
Để so sánh rõ ràng hai chuỗi dưới dạng chuỗi, truyền số thành chuỗi nếu cần, hãy sử dụng hàm
if['string1' == 'STRING1'] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }54
if['string1' == 'STRING1'] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }5
Hàm trả về một số nhỏ hơn 0 nếu
if['string1' == 'STRING1'] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }55 sắp xếp trước
if['string1' == 'STRING1'] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }56, lớn hơn 0 nếu
if['string1' == 'STRING1'] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }56 sắp xếp trước
if['string1' == 'STRING1'] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }55 hoặc 0 nếu chúng giống nhau
if[strcmp['string1', 'string1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }7
Một biến thể trên
if['string1' == 'STRING1'] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }54 là
if[strcmp['string1', 'string1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }70 , chuyển đổi chuỗi thành chữ thường trước khi so sánh chúng. Các đối số và giá trị trả về của nó giống như đối số của
if['string1' == 'STRING1'] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }54
if[strcasecmp['string1', 'string1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; } if[strcasecmp['string1', 'String1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; } if[strcasecmp['string1', 'STRING1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }1
Một biến thể khác của so sánh chuỗi là chỉ so sánh một vài ký tự đầu tiên của chuỗi. Các hàm
if[strcmp['string1', 'string1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }72 và
if[strcmp['string1', 'string1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }73 nhận một đối số bổ sung, số lượng ký tự ban đầu được sử dụng để so sánh
if[strcasecmp['string1', 'string1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; } if[strcasecmp['string1', 'String1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; } if[strcasecmp['string1', 'STRING1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }4
Biến thể cuối cùng của các hàm này là so sánh thứ tự tự nhiên với
if[strcmp['string1', 'string1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }74 và
if[strcmp['string1', 'string1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }75, lấy cùng các đối số như
if['string1' == 'STRING1'] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }54 và trả về cùng loại giá trị. So sánh theo thứ tự tự nhiên xác định các phần số của các chuỗi được so sánh và sắp xếp các phần chuỗi riêng biệt với các phần số
hiển thị các chuỗi theo thứ tự tự nhiên và thứ tự ASCII
Bảng 4-5. Thứ tự tự nhiên so với thứ tự ASCII
Trật tự tự nhiên
thứ tự ASCII
if[strcasecmp['string1', 'string1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; } if[strcasecmp['string1', 'String1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; } if[strcasecmp['string1', 'STRING1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }8
if[strcasecmp['string1', 'string1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; } if[strcasecmp['string1', 'String1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; } if[strcasecmp['string1', 'STRING1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }8
$string = "PHP Rocks"; $number = 5; if [$string < $number] { echo["$string < $number"]; } PHP Rocks < 50
if['string1' == 'STRING1'] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }60
if['string1' == 'STRING1'] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }61
$string = "PHP Rocks"; $number = 5; if [$string < $number] { echo["$string < $number"]; } PHP Rocks < 50
if['string1' == 'STRING1'] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }63
if['string1' == 'STRING1'] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }63
PHP cung cấp một số hàm cho phép bạn kiểm tra xem hai chuỗi có xấp xỉ bằng nhau không. ________ 277 , ________ 278 , ________ 279 và ________ 310
if['string1' == 'STRING1'] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }65
Mỗi thuật toán Soundex và Metaphone tạo ra một chuỗi đại diện cho cách phát âm của một từ trong tiếng Anh. Để xem liệu hai chuỗi có xấp xỉ bằng nhau với các thuật toán này hay không, hãy so sánh cách phát âm của chúng. Bạn chỉ có thể so sánh giá trị Soundex với giá trị Soundex và chỉ giá trị Metaphone với giá trị Metaphone. Thuật toán Metaphone thường chính xác hơn, như ví dụ sau minh họa
if['string1' == 'STRING1'] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }66
Hàm
if[strcasecmp['string1', 'string1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; } if[strcasecmp['string1', 'String1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; } if[strcasecmp['string1', 'STRING1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }11 trả về số lượng ký tự mà hai đối số chuỗi của nó có điểm chung. Đối số thứ ba, nếu có, là một biến để lưu trữ mức độ phổ biến dưới dạng phần trăm
if['string1' == 'STRING1'] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }67
Thuật toán Levenshtein tính toán độ giống nhau của hai chuỗi dựa trên số lượng ký tự bạn phải thêm, thay thế hoặc xóa để làm cho chúng giống nhau. Chẳng hạn,
if[strcasecmp['string1', 'string1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; } if[strcasecmp['string1', 'String1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; } if[strcasecmp['string1', 'STRING1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }12 và
if[strcasecmp['string1', 'string1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; } if[strcasecmp['string1', 'String1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; } if[strcasecmp['string1', 'STRING1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }13 có khoảng cách Levenshtein là 1, vì bạn chỉ cần thay đổi một ký tự [từ
if[strcasecmp['string1', 'string1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; } if[strcasecmp['string1', 'String1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; } if[strcasecmp['string1', 'STRING1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }14 thành
if[strcasecmp['string1', 'string1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; } if[strcasecmp['string1', 'String1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; } if[strcasecmp['string1', 'STRING1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }15] để làm cho chúng giống nhau
if['string1' == 'STRING1'] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }68
Thước đo độ tương tự này thường được tính toán nhanh hơn so với thước đo được sử dụng bởi hàm
if[strcasecmp['string1', 'string1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; } if[strcasecmp['string1', 'String1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; } if[strcasecmp['string1', 'STRING1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }11. Theo tùy chọn, bạn có thể chuyển ba giá trị cho hàm
if[strcasecmp['string1', 'string1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; } if[strcasecmp['string1', 'String1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; } if[strcasecmp['string1', 'STRING1'] == 0] { echo ' Strings match. '; } else { echo ' Strings do not match. '; }10 để chèn, xóa và thay thế trọng số riêng lẻ—ví dụ: để so sánh một từ với một từ rút gọn
Ví dụ này đặt trọng số quá mức cho phép chèn khi so sánh một chuỗi với khả năng co lại của nó, bởi vì phép rút gọn không bao giờ được chèn các ký tự