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

PHP strcmp 與 strcasecmp 字串比較函式完整指南

     編輯:PHP 綜合知識

strcmp:二進位安全、區分大小寫

int strcmp(string $str1, string $str2)
  • 按位元組逐一比較 ASCII 碼,區分大小寫。
  • 回傳:0 相等、<0 str1 較小、>0 str1 較大。
  • 與 strncmp 差異:strcmp 比較整個字串,strncmp 可指定長度。

strcasecmp:不區分大小寫版本

int strcasecmp(string $str1, string $str2)
  • 比較前將雙方轉為小寫(依當前 locale),再按位元組比較。
  • 回傳值規則同 strcmp。
  • 對應 strncasecmp 可指定長度。

實測範例

$a = '';       $b = '';
$c = 'www.jb51.net'; $d = 'WWW.JB51.NET';

echo strcmp($a, $b);     // 0  相等
echo strcmp($c, $d);     // 1  'w'(119) > 'W'(87)
echo strcasecmp($c, $d); // 0  不分大小寫視為相等

回傳值語意速記

$cmp = strcmp($a, $b);
if ($cmp === 0)       echo "相等";
elseif ($cmp < 0)     echo "$a 排在 $b 前面";
else                  echo "$a 排在 $b 後面";

效能與替代方案

常見陷阱

  1. 多位元組字串:strcmp 按位元組比較,UTF-8 中文會產生非預期結果。請改用 mb_strcmp(需 mbstring)或 Collator。
  2. Locale 影響:strcasecmp 依 setlocale(LC_CTYPE, ...) 行為不同,跨伺服器部署時建議明確設定 locale 或改用 mb_strtolower + strcmp。
  3. 混淆回傳值:記住 0 代表相等,if (strcmp(...)) 代表「不相等」。

實務建議

  • 單純相等判斷 → $a === $b(最快、語意最清晰)。
  • 需排序比較(usort 回呼) → strcmp 或 strcasecmp。
  • 含數字自然排序 → strnatcmp / strnatcasecmp。
  • 多語言環境 → Collator::compare 配合 ucol_setStrength 控制比較層級。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
函式速度適用場景
strcmp極快精確相等判斷、排序比較
strcasecmp快使用者輸入比對、不分大小寫排序
===最快已知長度相同、單純相等檢查
strnatcmp快含數字自然排序
Collator::compare中等多語言本地化排序 (intl)