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

PHP 字串反轉四種實作方法效能對比:從 strrev 到二分法交換

     編輯:PHP 相關知識

方法一:內建函數 strrev()(推薦)

<?php
$str = "Hello World";
echo strrev($str);  // dlroW olleH
?>

C 層實作,效能最佳、支援多位元組(配合 mb_strrev 或轉碼)。

方法二:迴圈前綴串接(效能差)

<?php
$str = "Hello World";
$rev = "";
for ($i = strlen($str) - 1; $i >= 0; $i--) {
    $rev .= $str[$i];
}
echo $rev;
?>

每次串接都重新分配記憶體,長字串極慢(O(n²))。

方法三:陣列收集再 join(中等)

<?php
$str = "Hello World";
$arr = [];
for ($i = strlen($str) - 1; $i >= 0; $i--) {
    $arr[] = $str[$i];
}
echo implode('', $arr);
?>

單次記憶體分配,O(n),但額外陣列開銷。

方法四:二分法原地交換(教學用)

<?php
$str = "Hello World";
$len = strlen($str);
$half = (int)ceil($len / 2);

for ($i = 0; $i < $half; $i++) {
    $j = $len - 1 - $i;
    // 交換 $str[$i] 和 $str[$j]
    $tmp = $str[$i];
    $str[$i] = $str[$j];
    $str[$j] = $tmp;
}
echo $str;
?>

三大知識點

  1. ceil():無條件進位,ceil(5/4)=2
  2. 字串可用陣列語法存取:$str[0], $str[1]...
  3. 迴圈次數減半(n/2 vs n),理論效能提升 2 倍

效能實測參考(百萬字串)

方法相對時間記憶體
strrev()1.0x (基準)低
二分法交換~3.5x低
陣列+implode~5x中
迴圈串接~50x+高

多位元組字元(中文)處理

<?php
// 錯誤:逐位元組反轉會破壞 UTF-8
$str = "中文測試";
echo strrev($str);  // 亂碼

// 正確:轉為字元陣列再反轉
function mb_strrev($str) {
    $chars = preg_split('//u', $str, -1, PREG_SPLIT_NO_EMPTY);
    return implode('', array_reverse($chars));
}
echo mb_strrev("中文測試");  // 試測文中
?>

總結

  1. 生產環境直接用 strrev()(ASCII)或上述 mb_strrev()(UTF-8)
  2. 二分法交換是演算法教學經典,理解原地演算法與雙指標技巧
  3. 避免迴圈串接(.=),改用陣列收集或內建函數
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved