str_pad(string $string, int $length, string $pad_string = " ", int $pad_type = STR_PAD_RIGHT): string
STR_PAD_LEFT:左側填充(補零常用)STR_PAD_RIGHT:右側填充(默認)STR_PAD_BOTH:兩側填充,奇數額外字符分配給右側<?php
$cardCount = 10;
$cards = [];
for ($i = 1; $i <= $cardCount; $i++) {
// 左側補零至 10 位
$cards[] = str_pad($i, 10, '0', STR_PAD_LEFT);
}
print_r($cards);
/* 輸出:
Array
(
[0] => 0000000001
[1] => 0000000002
...
[9] => 0000000010
)
*/
<?php
function generateCode($prefix, $number, $totalLength = 12) {
// 計算數字部分需佔用長度
$numLength = $totalLength - strlen($prefix);
if ($numLength < 1) throw new InvalidArgumentException('Prefix too long');
$paddedNum = str_pad($number, $numLength, '0', STR_PAD_LEFT);
return $prefix . $paddedNum;
}
echo generateCode('ORD', 42); // ORD000000042
echo generateCode('USR', 1001, 10); // USR0001001
<?php
function generateUniqueCards($count, $length = 12, $prefix = 'CARD') {
$codes = [];
$numLength = $length - strlen($prefix);
$max = pow(10, $numLength) - 1;
if ($count > $max) throw new Exception('Count exceeds capacity');
while (count($codes) < $count) {
$rand = mt_rand(0, $max);
$code = $prefix . str_pad($rand, $numLength, '0', STR_PAD_LEFT);
$codes[$code] = true; // 去重
}
return array_keys($codes);
}
$cards = generateUniqueCards(5000, 14, 'VIP');
echo "Generated: " . count($cards) . " unique codes.\n";
<?php
echo str_pad('A', 5, 'XY', STR_PAD_LEFT); // XYXYA (非 XYXYA)
echo str_pad('A', 5, '123', STR_PAD_LEFT); // 12312A
// 規則:填充字符串循環使用,最後截斷至目標長度
PHP 8.0+ 拋出 ValueError;舊版本返回原字符串。建議顯式校驗 $length > 0。
<?php
$str = '中文';
echo strlen($str); // 6 (UTF-8 字節數)
echo mb_strlen($str); // 2 (字符數)
echo str_pad($str, 5, '0', STR_PAD_LEFT); // 000中文 (按字節填充,視覺寬度不準)
// 如需按顯示寬度對齊,需結合 mb_strwidth / 視覺寬度庫處理
<?php
$num = 123456789012345;
echo str_pad($num, 20, '0', STR_PAD_LEFT);
// 可能輸出:000001.23456789012345E+14 (科學計數法字符串)
// 解決:先用 number_format 或 sprintf 格式化
echo str_pad(number_format($num, 0, '', ''), 20, '0', STR_PAD_LEFT);
str_pad 為 C 級函數,性能極高,單次調用納秒級,無需優化。$arr = []; $arr[] = ... 避免擴容開銷。sprintf('%010d', $i) 替代,語義更明確且略快:<?php
// sprintf 格式化補零(僅限數字)
for ($i = 1; $i <= 1000000; $i++) {
$codes[] = sprintf('%010d', $i); // 10 位補零
}
| 方法 | 適用類型 | 可讀性 | 性能 | 靈活性 |
|---|---|---|---|---|
str_pad | 任意字符串 | ★★★★☆ | ★★★★★ | 高(任意填充字符、方向) |
sprintf('%0Nd') | 純數字 | ★★★★★ | ★★★★★ | 低(僅數字、左補零) |
手動 str_repeat('0', N-strlen($s)).$s | 任意 | ★★☆☆☆ | ★★★☆☆ | 中 |
str_pad() 是 PHP 實現固定長度編碼(卡號、訂單號、工單號等)的**首選工具**,語法簡潔、功能完整、性能優異。掌握其四大參數含義、多字符填充規則、多字節字符限制,並結合 sprintf 針對純數字場景優化,即可輕松應對各類業務編號生成需求。記住核心口訣:**左補零用 STR_PAD_LEFT,目標長度要算清,填充字符可自定,批量生成不重複。**