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

PHP 字符串插入子字符串的三種方法總結

     編輯:PHP 綜合知識

在字符串指定位置插入子串是常見操作。本文對比三種實現方式:手動遍歷、substr() 截取拼接、內置 substr_replace(),分析優缺點並推薦最佳實踐。

方法一:字符串遍歷重組(教學用)

<?php
function str_insert($str, $pos, $substr) {
    $startstr = $laststr = '';
    for ($j = 0; $j < $pos; $j++) {
        $startstr .= $str[$j];
    }
    for ($j = $pos; $j < strlen($str); $j++) {
        $laststr .= $str[$j];
    }
    return $startstr . $substr . $laststr;
}

$str = "1234567890";
$sstr = "new_word";
echo str_insert($str, 5, $sstr); // 輸出:12345new_word67890
?>

缺點: 效率低、代碼冗長、不支援多字節字符(中文會亂碼)。

方法二:substr() 截取拼接(推薦通用)

<?php
function str_insert2($str, $pos, $substr) {
    $start = substr($str, 0, $pos);
    $end = substr($str, $pos);
    return $start . $substr . $end;
    // 一行版:return substr($str, 0, $pos) . $substr . substr($str, $pos);
}

$str = "1234567890";
$sstr = "new_word";
echo str_insert2($str, 5, $sstr); // 輸出:12345new_word67890
?>

優點: 代碼簡潔、效率高、語義清晰。

注意: substr() 按字節操作,中文環境請使用 mb_substr()。

方法三:substr_replace() 直接插入(最佳選擇)

<?php
$str = "1234567890";
$sstr = "new_word";
// 第 4 參數 0 表示不替換任何字符,僅插入
echo substr_replace($str, $sstr, 5, 0); // 輸出:12345new_word67890
?>

函數簽名: substr_replace(string $string, string $replace, int $offset, int $length = 0)

  • $offset:插入位置(0 為開頭,負數從末尾計算)
  • $length:替換長度,0 表示純插入不替換

多字節字符串安全版本

<?php
function mb_str_insert($str, $pos, $substr, $encoding = 'UTF-8') {
    // 使用 mb_substr 確保中文不截斷
    return mb_substr($str, 0, $pos, $encoding) 
         . $substr 
         . mb_substr($str, $pos, null, $encoding);
}

// 測試中文
$str = "你好世界";
echo mb_str_insert($str, 2, "美好的"); // 輸出:你好美好的世界
?>

性能對比測試

<?php
$str = str_repeat('a', 10000);
$insert = 'TEST';

$start = microtime(true);
for ($i = 0; $i < 10000; $i++) str_insert($str, 5000, $insert);
echo "遍歷法: " . (microtime(true) - $start) . "s\n";

$start = microtime(true);
for ($i = 0; $i < 10000; $i++) str_insert2($str, 5000, $insert);
echo "substr法: " . (microtime(true) - $start) . "s\n";

$start = microtime(true);
for ($i = 0; $i < 10000; $i++) substr_replace($str, $insert, 5000, 0);
echo "substr_replace法: " . (microtime(true) - $start) . "s\n";

// 典型輸出:
// 遍歷法: 2.45s
// substr法: 0.12s
// substr_replace法: 0.08s
?>

總結建議

方法性能可讀性中文支援推薦場景
遍歷重組極低低不支援教學演示
substr 拼接高高需 mb_substr通用項目
substr_replace最高最高需 mb_ 版本生產環境首選

相關專題推薦

更多字符串操作技巧,請參考:《PHP 字符串(string)用法總結》、《PHP 正則表達式用法總結》、《PHP 多字節字符串處理指南》等專題。

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