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

PHP 字串比較函式完整指南:strcmp、strcasecmp、strnatcmp、strnatcasecmp 差異與應用

     編輯:PHP 綜合知識

PHP 提供多種字串比較函式,依據「區分大小寫」與「排序邏輯(字典序 vs 自然序)」分為四類。本文系統整理語法、回傳值、適用場景與實戰範例,助你精準選用。

函式對照表

函式大小寫敏感比較邏輯回傳值適用場景
strcmp($a, $b) ✅ 是 字典序(ASCII 碼順序) 0 相等、>0 $a較大、<0 $a較小 精確比對、排序、驗證
strcasecmp($a, $b) ❌ 否 字典序(忽略大小寫) 同上 不區分大小寫的比對、搜尋
strnatcmp($a, $b) ✅ 是 自然排序(人類直覺:2 < 10) 同上 含數字的字串排序(檔名、版本號)
strnatcasecmp($a, $b) ❌ 否 自然排序 + 忽略大小寫 同上 不區分大小寫的自然排序

實戰範例

1. strcmp - 字典序比較

<?php
$a = "i want to fly";
$b = "i want to climb";
$cmp = strcmp($a, $b); // 'f' (102) > 'c' (99) → 正數
if ($cmp > 0) echo '$a > $b';
elseif ($cmp < 0) echo '$a < $b';
else echo '$a == $b';
// 輸出: $a > $b
?>

2. strcasecmp - 忽略大小寫

<?php
$val1 = "Hello";
$val2 = "hello";
if (strcasecmp($val1, $val2) === 0) {
    echo '相同 (忽略大小寫)';
}
// 輸出: 相同 (忽略大小寫)
?>

3. strnatcmp - 自然排序(關鍵差異)

<?php
$arr = ['img12.png', 'img2.png', 'img1.png', 'img10.png'];

// 字典序排序(strcmp)
usort($arr, 'strcmp');
print_r($arr); 
// ['img1.png', 'img10.png', 'img12.png', 'img2.png'] ❌ 10 在 2 前面

// 自然排序
usort($arr, 'strnatcmp');
print_r($arr);
// ['img1.png', 'img2.png', 'img10.png', 'img12.png'] ✅ 符合直覺
?>

4. 版本號比較實例

<?php
$versions = ['1.2.10', '1.2.9', '1.10.0', '1.0.0'];
usort($versions, 'strnatcmp');
print_r($versions);
// ['1.0.0', '1.2.9', '1.2.10', '1.10.0'] ✅
?>

進階提示

  • 嚴格相等判斷:單純檢查是否完全相同,用 $a === $b(含型別)或 $a == $b(型別轉換)即可,效能優於 strcmp。
  • strcoll():依當前 LC_COLLATE 地區設定比較,多國語言排序才需用到。
  • soundex()、metaphone():發音相似度比較,用於模糊搜尋/姓名匹配。

總結建議

  1. 一般相等檢查 → === 或 ==
  2. 需排序/大小比較且含數字 → 優先用 strnatcmp/strnatcasecmp
  3. 純字母排序、區分大小寫 → strcmp
  4. 純字母排序、不區分大小寫 → strcasecmp

更多字串處理技巧請參考專題:《PHP 字串用法總結》、《PHP 正則表達式用法總結》。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved