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

PHP str_pad() 函數詳解:卡號、訂單號不足位數自動補零實戰

     編輯:PHP 相關知識

函數簡介

str_pad() 是 PHP 內建的字串填充函數,可將字串補齊至指定長度。常用於:會員卡號、訂單編號、發票號碼、員工工號等需要固定位數的編號生成。

語法與參數

str_pad(string $string, int $length, string $pad_string = " ", int $pad_type = STR_PAD_RIGHT): string
參數說明
$string必需。原始字串
$length必需。目標長度。若小於原字串長度則不處理
$pad_string選填。填充字元,預設為空白。可為多字元字串
$pad_type選填。填充方向常數

填充方向常數

常數行為適用場景
STR_PAD_LEFT左側填充(最常用)編號補零、對齊輸出
STR_PAD_RIGHT右側填充(預設)文字靠左對齊
STR_PAD_BOTH兩側填充,右側優先標題置中裝飾

核心範例:生成 10 位數會員卡號

<?php
$cardCount = 10;
$cards = [];

for ($i = 1; $i <= $cardCount; $i++) {
    // 關鍵:STR_PAD_LEFT 在左側補 0
    $cardNo = str_pad($i, 10, '0', STR_PAD_LEFT);
    $cards[] = $cardNo;
}

print_r($cards);
/* 輸出:
Array
(
    [0] => 0000000001
    [1] => 0000000002
    [2] => 0000000003
    [3] => 0000000004
    [4] => 0000000005
    [5] => 0000000006
    [6] => 0000000007
    [7] => 0000000008
    [8] => 0000000009
    [9] => 0000000010
)
*/
?>

進階應用場景

1. 訂單編號:日期 + 流水號

<?php
function generateOrderNo($seq) {
    $datePart = date('Ymd');           // 20241219
    $seqPart  = str_pad($seq, 6, '0', STR_PAD_LEFT); // 000001
    return $datePart . $seqPart;       // 20241219000001
}

// 使用 Redis 原子計數器確保流水號唯一
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$seq = $redis->incr('order_seq:' . date('Ymd'));
echo generateOrderNo($seq);
?>

2. 發票號碼:字軌 + 8 碼數字

<?php
function generateInvoiceNo($track, $number) {
    return strtoupper($track) . str_pad($number, 8, '0', STR_PAD_LEFT);
}
// 輸出:AB12345678
echo generateInvoiceNo('ab', 12345678);
?>

3. 固定寬度表格輸出(CLI 報表)

<?php
$products = [
    ['id' => 1, 'name' => '筆記型電腦', 'price' => 35000],
    ['id' => 2, 'name' => '滑鼠', 'price' => 500],
    ['id' => 3, 'name' => '機械鍵盤', 'price' => 2800],
];

// 表頭
echo str_pad('ID', 4, ' ', STR_PAD_RIGHT) . ' | ' .
     str_pad('商品名稱', 12, ' ', STR_PAD_RIGHT) . ' | ' .
     str_pad('價格', 10, ' ', STR_PAD_LEFT) . PHP_EOL;
echo str_repeat('-', 35) . PHP_EOL;

// 資料列
foreach ($products as $p) {
    echo str_pad($p['id'], 4, ' ', STR_PAD_RIGHT) . ' | ' .
         str_pad($p['name'], 12, ' ', STR_PAD_RIGHT) . ' | ' .
         str_pad(number_format($p['price']), 10, ' ', STR_PAD_LEFT) . PHP_EOL;
}

/* 輸出:
ID   | 商品名稱     |       價格
-----------------------------------
1    | 筆記型電腦   |      35,000
2    | 滑鼠         |         500
3    | 機械鍵盤     |       2,800
*/
?>

4. 多字元填充字串

<?php
// 使用「-=」作為填充字元,長度 20
echo str_pad('CHAPTER 1', 20, '-=', STR_PAD_BOTH);
// 輸出:-=-=-CHAPTER 1-=-=-
?>

常見陷阱與注意事項

  1. 長度不足不截斷:若 $length < strlen($string),函數直接回傳原字串,不會截斷
  2. 多位元組字元:中文字元在 UTF-8 下佔 3 位元組,strlen() 計算的是位元組數非字元數,可能導致視覺寬度不符。CLI 報表建議使用 mb_strlen() 搭配手動計算
  3. 填充字串長度 > 1:會重複填充字串直到達長度,最後可能被截斷

替代方案比較

方法優點缺點適用場景
str_pad()內建、支援多方向、多字元填充多位元組字元視覺寬度問題純數字/英文編號補零
sprintf('%010d', $num)格式化功能強、效能佳僅限數字、不支援字串前綴純數字流水號
str_repeat('0', 10 - strlen($num)) . $num邏輯直觀需手動處理長度判斷簡單場景
NumberFormatter (intl)支援多國語系、格式化規則豐富需安裝 intl 擴展、較重國際化專案

總結

str_pad() 是處理固定長度編號的利器,搭配 STR_PAD_LEFT 和 '0' 填充字元,能輕鬆實現卡號、訂單號、發票號的自動補零。實務上建議封裝為工具函式,統一管理編號規則,並注意多位元組字元的視覺寬度問題。

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