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

PHP 字符串首尾填充指定字符:str_prefix / str_suffix 函數實現與應用

     編輯:PHP 相關知識

PHP 字符串首尾填充指定字符:str_prefix / str_suffix 函數實現與應用

在格式化輸出、生成固定寬度代碼、對齊日誌欄位等場景中,常需在字符串首尾重複填充特定字符。本文提供兩個輕量級函數 str_prefix()、str_suffix(),支援自定義填充字符與次數,並對比內建 str_pad() 的差異。

函數實現

<?php
/**
 * 字符串左側填充(前綴)
 * @param string $str  原字符串
 * @param int    $n    填充次數
 * @param string $char 填充字符,預設空格
 * @return string
 */
function str_prefix($str, $n = 1, $char = ' ') {
    for ($x = 0; $x < $n; $x++) {
        $str = $char . $str;
    }
    return $str;
}

/**
 * 字符串右側填充(後綴)
 * @param string $str  原字符串
 * @param int    $n    填充次數
 * @param string $char 填充字符,預設空格
 * @return string
 */
function str_suffix($str, $n = 1, $char = ' ') {
    for ($x = 0; $x < $n; $x++) {
        $str = $str . $char;
    }
    return $str;
}

// 測試
echo str_prefix('test', 3, '-'); // ---test
echo "\n";
echo str_suffix('test', 3, '-'); // test---
?>

對比:內建 str_pad() 更強大

<?php
$str = 'test';
// 左填充至長度 10
echo str_pad($str, 10, '-', STR_PAD_LEFT);  // ------test
// 右填充至長度 10
echo str_pad($str, 10, '-', STR_PAD_RIGHT); // test------
// 兩側填充
echo str_pad($str, 10, '-', STR_PAD_BOTH);  // ---test---
// 指定填充字符串(多字符循環)
echo str_pad($str, 10, 'ab', STR_PAD_LEFT); // ababatest
?>

核心差異表

特性str_prefix / str_suffixstr_pad()
控制維度填充次數目標總長度
填充對象單字符字符串(循環使用)
方向控制分兩函數STR_PAD_LEFT/RIGHT/BOTH
性能循環拼接,大量填充較慢C 級實現,極快
適用場景已知次數、單字符、簡單邏輯對齊輸出、固定寬度、多字符模式

實戰應用示例

<?php
// 1. 生成固定長度訂單號:前綴 0 補齊 8 位
$orderId = 123;
$orderNo = str_pad($orderId, 8, '0', STR_PAD_LEFT); // 00000123

// 2. 日誌欄位對齊:左對齊 20 字符
$label = 'USER_LOGIN';
$logLine = str_pad($label, 20, ' ', STR_PAD_RIGHT) . ' | ' . date('Y-m-d H:i:s');
/* 輸出:
USER_LOGIN          | 2024-01-15 10:30:45
*/

// 3. 簡單模板佔位:前綴 $
$price = 99;
echo '$' . str_pad($price, 6, '0', STR_PAD_LEFT); // $000099

// 4. 自定義函數場景:已知需加 3 個星號前綴
$secret = 'password';
echo str_prefix($secret, 3, '*'); // ***password
?>

性能優化提示

  • 大量填充(>1000 次)請務必使用 str_pad() 或 str_repeat($char, $n) . $str 避免循環拼接開銷。
  • str_repeat() 內部優化,單次分配內存,效率遠高於循環 .=。

總結

str_prefix/str_suffix 適合教學演示、極簡邏輯;生產代碼中優先使用 str_pad()、str_repeat() 等內建函數,代碼更簡潔、性能更優、功能更全。

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