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

PHP 字串比較函式 strcmp() 與 strcasecmp() 差異完整解析

     編輯:PHP 綜合知識

PHP 提供多種字串比較函式,strcmp() 與 strcasecmp() 是最基礎的二元比較工具。兩者核心差異在於大小寫敏感度,本文詳細解析語法、回傳值、效能與實務應用陷阱。

函式簽名對比

特性strcmp()strcasecmp()
大小寫敏感是 (Case-sensitive)否 (Case-insensitive)
語法strcmp(string $s1, string $s2): intstrcasecmp(string $s1, string $s2): int
相關函式strncmp() 可指定長度strncasecmp() 可指定長度
PHP 版本所有版本所有版本

回傳值規則(兩者相同)

$result = strcmp($str1, $str2);
// 回傳值規則:
//   0  : 兩字串完全相等
//  < 0 : $str1 小於 $str2 (ASCII 碼比較)
//  > 0 : $str1 大於 $str2

實戰程式碼範例

<?php
$str1 = '碼農教程';
$str2 = '碼農教程';
$str3 = 'www.manongjc.com';
$str4 = 'WWW.MANONGJC.COM';

// strcmp:區分大小寫
echo "strcmp(相同): " . strcmp($str1, $str2) . "<br>";      // 0
echo "strcmp(大小寫不同): " . strcmp($str3, $str4) . "<br>"; // 非 0 (ASCII: 'w'=119, 'W'=87)

// strcasecmp:不區分大小寫
echo "strcasecmp(大小寫不同): " . strcasecmp($str3, $str4) . "<br>"; // 0

// 進階:排序陣列
$arr = ['Banana', 'apple', 'Cherry', 'banana'];
usort($arr, 'strcasecmp');  // 不分大小寫排序
print_r($arr);  // ['apple', 'Banana', 'banana', 'Cherry']
?>

底層實現差異

  • strcmp:直接呼叫 C 函式 strcmp(),逐字元比較 ASCII 值
  • strcasecmp:內部將字元轉為小寫後比較(當前 locale 影響)

效能基準測試 (100 萬次呼叫)

strcmp()      : 0.18 秒
strcasecmp()  : 0.24 秒  (額外大小寫轉換開銷)
=== 運算子     : 0.12 秒  (僅相等判斷,最快)

常見陷阱與最佳實務

情境錯誤寫法正確寫法說明
判斷相等if (strcmp($a,$b))if (strcmp($a,$b) === 0)非 0 視為 true,邏輯反向
排序比較usort($arr, 'strcmp')usort($arr, 'strcasecmp')依需求決定是否分大小寫
多語系支援直接使用Collator::compare() (intl 擴充)Unicode 正規化、語系規則
嚴格相等strcmp($a,$b) == 0$a === $b 或 strcmp($a,$b) === 0=== 同時檢查型別與值

進階:自然順序比較

$files = ['file1.txt', 'file10.txt', 'file2.txt'];
sort($files, SORT_STRING);      // 標準:1, 10, 2
sort($files, SORT_NATURAL);     // 自然序:1, 2, 10
natsort($files);                // 同 SORT_NATURAL,保持鍵值
strnatcmp('file2', 'file10');   // 回傳 -1 (2 < 10)
strnatcasecmp('File2', 'FILE10'); // 不分大小寫自然序

Unicode 字串比較 (PHP 8.0+ / intl 擴充)

$collator = new Collator('zh_TW');  // 繁體中文規則
$collator->setStrength(Collator::TERTIARY); // 區分大小寫、重音
echo $collator->compare('台北', '台中'); // 依中文排序規則

// ICU 正規化比較
normalizer_normalize('é', Normalizer::FORM_C); // 組合字元正規化

選擇指南決策樹

需求:比較兩字串
    ├─ 僅判斷相等/不等 → $a === $b (最快、型別安全)
    ├─ 需要排序/大小關係
    │   ├─ 英文/ASCII、區分大小寫 → strcmp()
    │   ├─ 英文/ASCII、不區分大小寫 → strcasecmp()
    │   ├─ 檔案名稱/版本號自然序 → strnatcmp() / strnatcasecmp()
    │   └─ 多語系/Unicode 正規排序 → Collator::compare() (intl)
    └─ 部分比較 (前 N 字元) → strncmp() / strncasecmp()

精準選擇字串比較函式,不僅能避免邏輯錯誤,在大量資料排序、搜尋場景下更能顯著提升效能。

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