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

PHP 字串比較函數大全:strcmp、strcasecmp、strnatcmp、strncmp 深度解析

     編輯:PHP 綜合知識

PHP 提供多種字串比較函數,按字節、自然排序、大小寫敏感度、指定長度等不同語義滿足多樣化需求。

函數對照表

函數比較方式大小寫敏感特殊特性回傳值
strcmp()按字節 (ASCII)是二進制安全<0, =0, >0
strcasecmp()按字節否忽略大小寫<0, =0, >0
strnatcmp()自然排序是數字按數值比較<0, =0, >0
strncasecmp()自然排序否忽略大小寫 + 自然排序<0, =0, >0
strncmp()指定長度字節是只比前 n 字符<0, =0, >0

回傳值語義

  • 0:兩字串相等(按比較規則)
  • < 0:$str1 小於 $str2
  • > 0:$str1 大於 $str2

strcmp() vs strcasecmp()

<?php
$a = "Hello"; $b = "hello";
echo strcmp($a, $b);      // -1 (H=72 < h=104)
echo strcasecmp($a, $b);  // 0  (忽略大小寫視為相等)
?>

自然排序 strnatcmp():人類直覺順序

<?php
$files = ['file1.txt', 'file10.txt', 'file2.txt'];
sort($files);              // 標準排序:file1, file10, file2
usort($files, 'strnatcmp'); // 自然排序:file1, file2, file10
print_r($files);
?>

指定長度比較 strncmp()

<?php
$a = "www.example.com";
$b = "www.example.org";
echo strncmp($a, $b, 11); // 0 (前 11 字符 "www.example" 相同)
echo strncmp($a, $b, 12); // -1 (.com < .org)
?>

排序應用:usort 整合比較函數

<?php
$versions = ['1.2.10', '1.2.3', '1.10.1', '1.2.1'];
usort($versions, 'strnatcmp');
print_r($versions);
// 正確版本號排序:1.2.1, 1.2.3, 1.2.10, 1.10.1
?>

效能提示

  • 純 ASCII 比較用 strcmp() 最快
  • 自然排序較慢,大量資料考慮預處理(填零對齊)
  • 嚴格相等判斷用 ===,避免函數呼叫開銷

選擇正確的比較函數,能讓排序、去重、查找等邏輯符合業務預期,避免「10 排在 2 前面」這類經典 Bug。

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