PHP 提供多種字串比較函式,依據「區分大小寫」與「排序邏輯(字典序 vs 自然序)」分為四類。本文系統整理語法、回傳值、適用場景與實戰範例,助你精準選用。
| 函式 | 大小寫敏感 | 比較邏輯 | 回傳值 | 適用場景 |
|---|---|---|---|---|
strcmp($a, $b) |
✅ 是 | 字典序(ASCII 碼順序) | 0 相等、>0 $a較大、<0 $a較小 | 精確比對、排序、驗證 |
strcasecmp($a, $b) |
❌ 否 | 字典序(忽略大小寫) | 同上 | 不區分大小寫的比對、搜尋 |
strnatcmp($a, $b) |
✅ 是 | 自然排序(人類直覺:2 < 10) | 同上 | 含數字的字串排序(檔名、版本號) |
strnatcasecmp($a, $b) |
❌ 否 | 自然排序 + 忽略大小寫 | 同上 | 不區分大小寫的自然排序 |
<?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 ?>
<?php
$val1 = "Hello";
$val2 = "hello";
if (strcasecmp($val1, $val2) === 0) {
echo '相同 (忽略大小寫)';
}
// 輸出: 相同 (忽略大小寫)
?>
<?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'] ✅ 符合直覺 ?>
<?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():發音相似度比較,用於模糊搜尋/姓名匹配。=== 或 ==strnatcmp/strnatcasecmpstrcmpstrcasecmp更多字串處理技巧請參考專題:《PHP 字串用法總結》、《PHP 正則表達式用法總結》。