前言
strcmp() 是 PHP 核心字串比較函數,採用二進位安全、區分大小寫的字典序比較。本文說明回傳值含義、語法、參數與實戰範例,並對比 strcasecmp、strnatcmp 等相關函數。
定義與回傳值
| 回傳值 | 含義 |
0 | 兩字串完全相等 |
< 0 | string1 小於 string2 |
> 0 | string1 大於 string2 |
語法與參數
strcmp(string $string1, string $string2): int
| 參數 | 說明 |
string1 | 必選。第一個比較字串。 |
string2 | 必選。第二個比較字串。 |
實戰範例
基本比較
<?php
echo strcmp('Hello world!', 'Hello world!'); // 0
echo strcmp('Apple', 'Banana'); // -1 (A < B)
echo strcmp('Zebra', 'Apple'); // 1 (Z > A)
?>
區分大小寫示範
<?php
echo strcmp('hello', 'Hello'); // 非 0,因 'h' (104) > 'H' (72)
?>
排序應用:usort 結合 strcmp
<?php
$fruits = ['Banana', 'apple', 'Cherry', 'Apricot'];
usort($fruits, 'strcmp');
print_r($fruits);
/*
Array
(
[0] => Apricot
[1] => Banana
[2] => Cherry
[3] => apple // 小寫字母 ASCII 較大,排在最後
)
*/
?>
常見誤區與最佳實踐
- 不要用於數值比較:
strcmp('10', '2') 回傳負數('1' < '2'),若需自然排序請用 strnatcmp。
- 多語言環境:
strcmp 僅按字節比較,UTF-8 多位元組字元會導致錯誤順序。需區域感知排序請用 strcoll 或 Collator (intl 擴展)。
- 嚴格相等判斷:僅需判斷是否相等時,
=== 效能優於 strcmp() === 0。
相關函數快速查閱
| 函數 | 特性 |
| strcasecmp | 不區分大小寫 |
| strnatcmp | 自然排序(數字按數值比較) |
| strnatcasecmp | 自然排序 + 不區分大小寫 |
| strncmp | 比較前 n 個字元 |
| substr_compare | 指定位移與長度比較 |
結語
strcmp() 是 PHP 字串比較的基石,理解其二進位安全、區分大小寫特性,並搭配 usort、strnatcmp 等進階函數,能滿足大多數排序與比較需求。多語言專案請務必引入 intl 擴展以獲得正確的區域化排序結果。