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

PHP strncmp() 函式:比較兩字串前 N 個字元完整指南

     編輯:PHP 綜合知識

函式定義與參數

int strncmp(string $str1, string $str2, int $length)

區分大小寫,按 ASCII 碼逐字元比較。回傳值:

  • 0:前 $length 字元相等
  • < 0:$str1 較小
  • > 0:$str1 較大

基本範例

$str1 = "welcome to www.jb51.net";
$str2 = "WELCOME TO WWW.JB51.NET";
$str3 = "welcome to php";

echo strncmp($str1, $str2, 2); // 1  (w vs W,ASCII 119 > 87)
echo strncmp($str1, $str3, 2); // 0  (we vs we 相等)

與 strcmp()、strcasecmp() 差異比較

參數說明
$str1第一個字串
$str2第二個字串
$length比較字元數(必填)
函式比較範圍大小寫適用場景
strcmp整個字串敏感完整字串相等判斷
strncmp前 N 字元敏感前綴比對、排序分組
strcasecmp整個字串不敏感使用者輸入比對
strncasecmp前 N 字元不敏感前綴不分大小寫比對

實戰應用場景

1. 檢查字串前綴(如協議、標記)

function hasPrefix($str, $prefix) {
    return strncmp($str, $prefix, strlen($prefix)) === 0;
}
var_dump(hasPrefix("https://example.com", "https://")); // true
var_dump(hasPrefix("https://example.com", "https://"));  // false

2. 依前綴分組排序

$items = ['apple_1', 'banana_2', 'apple_3', 'cherry_4'];
usort($items, function($a, $b) {
    return strncmp($a, $b, 5); // 只比前 5 字元
});
// 結果:apple_1, apple_3, banana_2, cherry_4

3. 解析固定寬度格式資料

$record = "20240115USER001PAID   ";
$date  = substr($record, 0, 8);
$type  = substr($record, 8, 4);
if (strncmp($type, 'USER', 4) === 0) { /* 處理用戶記錄 */ }

效能提示

  • strncmp 為 C 層實作,極快,優於 substr($a,0,$n) === substr($b,0,$n)(避免建立子字串)。
  • 大量比較時,若長度固定,可預先計算 $len = strlen($prefix) 避免重複呼叫。
  • PHP 8.0+ 新增 str_starts_with($haystack, $needle) 語意更清晰,內部同樣優化,建議優先使用。

常見錯誤

  1. 長度超過字串長度:會比較到字串結尾,不會報錯,但結果可能非預期。
  2. 多位元組字串:strncmp 按位元組比較,UTF-8 中文前綴比對會錯誤。請改用 mb_strncmp(需 mbstring 擴充)或先轉編碼。
  3. 混淆回傳值:記住 0 代表相等,非布林值,if (strncmp(...)) 判斷「不相等」時需寫 !== 0。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved