首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 字符串比較函數深度解析:similar_text、strnatcmp、strcasecmp

     編輯:PHP 綜合知識

三大比較函數對比

函數核心特性返回值典型場景
similar_text()計算匹配字符數、可得相似度百分比匹配字符數(int),引用參數返回百分比模糊匹配、去重、拼寫糾錯
strnatcmp()自然排序算法(數字按數值比較)< 0 / 0 / > 0文件名排序、版本號比較
strcasecmp()二進制安全、大小寫不敏感< 0 / 0 / > 0用戶輸入驗證、關鍵字匹配

similar_text() — 相似度分析

int similar_text(string $str1, string $str2 [, float &$percent])
  • 基於最長公共子序列算法,精度高但 O(N³) 複雜度,長字符串慎用
  • levenshtein() 更快(O(N·M)),但不直接給百分比
<?php
$str1 = 'hello world';
$str2 = 'hello peter';

$count = similar_text($str1, $str2, $percent);
echo "匹配字符數: $count\n";      // 6 ('hello ')
echo "相似度: $percent%\n";        // 54.545454...
?>

strnatcmp() — 自然排序比較

int strnatcmp(string $str1, string $str2)
  • 大小寫敏感,對應 strnatcasecmp() 不敏感版
  • 「自然算法」:'file2.txt' < 'file10.txt'(按數值 2 < 10),而標準排序 'file10.txt' < 'file2.txt'(按字符 '1' < '2')
<?php
$files = ['file1.txt', 'file10.txt', 'file2.txt', 'file20.txt'];
usort($files, 'strnatcmp');
print_r($files);
/*
Array
(
    [0] => file1.txt
    [1] => file2.txt
    [2] => file10.txt
    [3] => file20.txt
)
*/
?>

strcasecmp() — 大小寫不敏感比較

int strcasecmp(string $str1, string $str2)
  • 二進制安全:可比較含 \0 的字符串
  • 等價於 strtolower($a) === strtolower($b) 但更高效、直接返回排序關係
  • 對應敏感版 strcmp()
<?php
var_dump(strcasecmp('Hello', 'hello'));  // 0 (相等)
var_dump(strcasecmp('Apple', 'Banana')); // -1 (Apple < Banana)
var_dump(strcasecmp('Zebra', 'apple'));  // 1 (Zebra > apple)
?>

選擇指南

  • 需相似度百分比 → similar_text()(短字符串)
  • 需編輯距離 → levenshtein()
  • 文件名/版本號自然排序 → strnatcmp() / strnatcasecmp()
  • 用戶輸入忽略大小寫判等 → strcasecmp() === 0
  • 簡單判等 → === 最快
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved