Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】str_pad()関数の使い方

str_pad関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

str_pad関数は、指定された文字列を特定の長さに揃えるためにパディングを実行する関数です。この関数は、元の文字列の長さを増やし、指定した文字で埋めることで、出力のフォーマットを統一したり、視認性を向上させたりする際に役立ちます。

この関数を使用する際は、まずパディングを適用したい「文字列」を指定します。次に、最終的に文字列が持つべき「目標の長さ」を整数で指定します。この目標の長さが元の文字列の長さよりも短い場合、文字列は切り詰められずに元のまま返されます。

さらに、オプションとして二つの引数を指定できます。一つはパディングに使用する「埋め文字」です。これを省略した場合、デフォルトで半角スペースが埋め文字として使われます。もう一つは「パディングの方向」です。これは整数値で指定し、STR_PAD_LEFTを指定すると文字列の左側にパディングが追加され、STR_PAD_RIGHTを指定すると文字列の右側にパディングが追加されます。STR_PAD_BOTHを指定すると、パディングは左右にできるだけ均等に分配されますが、もし均等に分配できない場合は右側により多くのパディングが追加されます。この引数を省略した場合、デフォルトでSTR_PAD_RIGHTが適用されます。

str_pad関数は、パディングされた新しい文字列を生成して返します。元の文字列自体は変更されません。例えば、表形式のデータを整形したり、固定長のファイルを作成したり、あるいはユーザーインターフェース上で文字列をきれいに配置したりするなど、多岐にわたる場面でその機能が活用されます。

構文(syntax)

1<?php
2$originalString = "PHP";
3$paddedString = str_pad($originalString, 10, "*", STR_PAD_BOTH);
4echo $paddedString; // 出力例: ***PHP****
5?>

引数(parameters)

string $string, int $length, string $pad_string = ' ', int $pad_type = STR_PAD_RIGHT

  • string $string: パディング処理を行う元の文字列
  • int $length: パディング後の文字列の最終的な長さを指定する整数
  • string $pad_string = ' ': 元の文字列をパディングするために使用する文字列。省略された場合は半角スペースが使用されます。
  • int $pad_type = STR_PAD_RIGHT: パディングの種類を指定します。STR_PAD_RIGHT(右側)、STR_PAD_LEFT(左側)、STR_PAD_BOTH(両側)のいずれかを指定します。省略された場合は右側パディングが使用されます。

戻り値(return)

string

指定された文字列を指定された長さになるように、指定された文字列で埋め合わせます。

サンプルコード

PHP str_pad の使い方と誤解しやすい点

1<?php
2
3/**
4 * str_pad関数の基本的な使い方と、"not working"と誤解されがちなケースを解説します。
5 * システムエンジニアを目指す初心者向けに、正確で簡潔なサンプルコードを提供します。
6 */
7function demonstrateStrPadUsage(): void
8{
9    echo "--- str_pad 基本的な使い方 ---" . PHP_EOL;
10
11    $baseString = "Hello"; // 元の文字列
12    $targetLength = 10;    // 目標の文字列長
13    $padString = "-";      // パディングに使う文字列
14
15    // 1. デフォルトの右パディング (スペースで右側を埋める)
16    // str_pad($string, $length) は、str_pad($string, $length, ' ', STR_PAD_RIGHT) と同等です。
17    $resultDefaultRight = str_pad($baseString, $targetLength);
18    echo "デフォルト (スペース右パディング): '" . $resultDefaultRight . "' (長さ: " . strlen($resultDefaultRight) . ")" . PHP_EOL;
19
20    // 2. 指定文字による右パディング
21    $resultRight = str_pad($baseString, $targetLength, $padString, STR_PAD_RIGHT);
22    echo "右パディング ('" . $padString . "'):        '" . $resultRight . "' (長さ: " . strlen($resultRight) . ")" . PHP_EOL;
23
24    // 3. 左パディング
25    $resultLeft = str_pad($baseString, $targetLength, $padString, STR_PAD_LEFT);
26    echo "左パディング ('" . $padString . "'):         '" . $resultLeft . "' (長さ: " . strlen($resultLeft) . ")" . PHP_EOL;
27
28    // 4. 両側パディング (ほぼ均等に)
29    $resultBoth = str_pad($baseString, $targetLength, $padString, STR_PAD_BOTH);
30    echo "両側パディング ('" . $padString . "'):      '" . $resultBoth . "' (長さ: " . strlen($resultBoth) . ")" . PHP_EOL;
31
32    echo PHP_EOL . "--- 'str_pad not working' と誤解されがちなケース ---" . PHP_EOL;
33
34    $originalText = "PHP"; // 元の文字列の長さは3
35    $originalLength = strlen($originalText);
36
37    // ケース1: 指定した長さ ($length) が元の文字列の長さ以下の場合
38    // str_padは文字列を切り詰めず、パディングも行わず、元の文字列をそのまま返します。
39    $notPaddedLength = $originalLength; // 元の文字列と同じ長さ (3)
40    $resultCase1a = str_pad($originalText, $notPaddedLength, "#", STR_PAD_RIGHT);
41    echo "指定長が元の文字列と同じ (" . $notPaddedLength . "):  '" . $resultCase1a . "' (長さ: " . strlen($resultCase1a) . ")" . PHP_EOL;
42    echo "  -> パディングは行われず、元の文字列がそのまま返されます。" . PHP_EOL;
43
44    $shorterLength = 2; // 元の文字列より短い長さ (2)
45    $resultCase1b = str_pad($originalText, $shorterLength, "#", STR_PAD_RIGHT);
46    echo "指定長が元の文字列より短い (" . $shorterLength . "): '" . $resultCase1b . "' (長さ: " . strlen($resultCase1b) . ")" . PHP_EOL;
47    echo "  -> パディングも切り詰めも行われず、元の文字列がそのまま返されます。" . PHP_EOL;
48
49    // ケース2: パディング文字列 ($pad_string) が複数文字の場合
50    // $pad_string は必要に応じて繰り返して使用されます。
51    $multiCharPad = "abc";
52    $targetLengthMulti = 12; // 元の文字列 "PHP" (3文字) から 12文字にする
53    $resultCase2 = str_pad($originalText, $targetLengthMulti, $multiCharPad, STR_PAD_RIGHT);
54    echo "パディング文字列が複数文字 ('" . $multiCharPad . "'): '" . $resultCase2 . "' (長さ: " . strlen($resultCase2) . ")" . PHP_EOL;
55    echo "  -> '" . $multiCharPad . "' が繰り返されてパディングされます。" . PHP_EOL;
56}
57
58// 関数を実行して結果を表示します
59demonstrateStrPadUsage();
60
61?>

PHPのstr_pad関数は、文字列を指定した目標の長さまで、特定の文字で埋める(パディングする)ために使用されます。この関数は、引数として元の文字列$string、目標とする合計の長さ$lengthを受け取ります。オプションで、埋める文字を$pad_string(デフォルトはスペース)で指定でき、パディングの方向を$pad_type(右、左、両側)で指定できます。処理後、パディングされた新しい文字列を戻り値として返します。

基本的な使い方では、例えば「Hello」という文字列を10文字にしたい場合、右側をハイフンで埋めて「Hello-----」としたり、左側を埋めて「-----Hello」としたり、両側からほぼ均等に埋めたりすることができます。

「str_pad not working」と誤解されがちなケースとして、目標の長さ$lengthが元の文字列の長さ以下である場合が挙げられます。この場合、str_pad関数はパディングを行わず、元の文字列をそのまま返します。元の文字列が指定した長さより短く切り詰められることはありません。また、$pad_stringに複数文字を指定した場合、その文字列は目標の長さに達するまで繰り返して使用されます。これらの挙動を理解することで、str_pad関数を適切に利用できます。

str_pad関数は、指定する目標の長さ($length)が元の文字列の長さ以下の場合、パディングを行わずに元の文字列をそのまま返します。これは関数が動作していないと誤解されやすい重要な点ですのでご注意ください。また、パディングに使う文字列($pad_string)が複数文字の場合、その文字列全体が必要な回数だけ繰り返されて使用されます。一部だけが使われるわけではありません。引数$pad_string$pad_typeを省略すると、デフォルトでスペース(' ')を使って文字列の右側を埋める動作となります。この関数は常に文字列を返しますので、戻り値の型を意識する必要はありません。

PHP str_padで右側をパディングする

1<?php
2
3/**
4 * str_pad 関数を使用して文字列を右側にパディングする例。
5 *
6 * str_pad は、指定された長さになるまで文字列の左、右、または両側に
7 * 別の文字列(パディング文字列)を繰り返して追加します。
8 * キーワード「right」に基づいて、文字列の右側をパディングする例を示します。
9 */
10
11// パディングしたい元の文字列を定義します。
12$originalString = "Hello";
13
14// 最終的に文字列が持つべき合計長さを定義します。
15$targetLength = 10;
16
17// パディングに使用する文字列を定義します。
18$padString = "-";
19
20// パディングのタイプを定義します。
21// STR_PAD_RIGHT は、文字列の右側にパディングを追加します。
22// これは str_pad のデフォルトの動作でもあります。
23$padType = STR_PAD_RIGHT;
24
25// str_pad 関数を呼び出して文字列をパディングします。
26$paddedString = str_pad($originalString, $targetLength, $padString, $padType);
27
28// 結果を出力して確認します。
29echo "元の文字列: " . $originalString . PHP_EOL;
30echo "パディング後の文字列: " . $paddedString . PHP_EOL;
31
32// 別の例:デフォルトのパディング文字(スペース)を使用し、STR_PAD_RIGHT を省略した場合
33$anotherString = "World";
34$anotherTargetLength = 12;
35$defaultPaddedString = str_pad($anotherString, $anotherTargetLength); // pad_string と pad_type はデフォルト値が使用される
36
37echo PHP_EOL; // 区切り
38echo "別の元の文字列: " . $anotherString . PHP_EOL;
39echo "デフォルトでパディング後の文字列: '" . $defaultPaddedString . "'" . PHP_EOL; // スペースを確認しやすいようにクォートで囲む
40
41?>

PHPのstr_pad関数は、文字列を指定された長さになるまで、特定の文字列(パディング文字列)で埋める(パディングする)ために使用されます。これは、出力の表示形式を整えたい場合などに特に役立ちます。

この関数は、主に4つの引数を取ります。1番目の$stringはパディングしたい元の文字列、2番目の$lengthは最終的に得られる文字列の合計長さ、3番目の$pad_stringはパディングに使用する文字列、そして4番目の$pad_typeはパディングを追加する方向(左、右、または両側)を指定します。$pad_typeにはSTR_PAD_RIGHTSTR_PAD_LEFTSTR_PAD_BOTHのいずれかを指定できますが、今回の例では文字列の右側にパディングを追加するSTR_PAD_RIGHTを使用します。これはstr_pad関数のデフォルトの動作でもあります。関数はパディング後の新しい文字列を戻り値として返します。

サンプルコードでは、まず元の文字列"Hello"、目標の合計長さ10、パディングに使用する文字"-"、そしてパディング方向としてSTR_PAD_RIGHTをそれぞれ変数に定義しています。これらの引数でstr_pad関数を呼び出すと、"Hello"が合計10文字になるまで右側が"-"で埋められ、"Hello-----"という新しい文字列が生成されます。

また、str_pad関数は、$pad_string$pad_typeの引数を省略することも可能です。これらの引数を省略した場合、$pad_stringは半角スペースが、$pad_typeSTR_PAD_RIGHTがデフォルトとして適用されます。2つ目の例では、"World"という文字列がデフォルトの半角スペースで右側をパディングされ、"World "という結果を得ています。このように、str_pad関数は文字列の整形を柔軟かつ簡単に行うことができます。

str_pad関数は文字列を指定した長さに埋める際に便利ですが、いくつかの注意点があります。

第一に、指定する$length(最終的な長さ)が元の文字列の長さより短い場合、文字列は切り捨てられずにそのまま返され、パディングは行われません。

第二に、パディングに使用する$pad_stringが複数文字の場合、指定された長さに達するまで繰り返されますが、途中で切り取られることがあります。例えば「-=-」で埋める場合、最終的に「Hello-=-=-」のように「-=-」の途中までしか使われないこともあります。

第三に、日本語などのマルチバイト文字を扱う場合、str_padは文字数で長さを計算します。表示環境によっては、意図しない見た目の桁ずれが発生しないか、結果をよく確認することをお勧めします。

また、$pad_stringを省略すると半角スペースが、$pad_typeを省略するとSTR_PAD_RIGHT(右パディング)がデフォルトで適用されるため、基本的な右パディングであれば引数を省略できることも覚えておくと良いでしょう。

PHP str_padで文字列をスペース埋めする

1<?php
2
3// str_pad関数は、指定された長さになるまで文字列を埋めるために使用されます。
4// この例では、キーワード「spaces」に合わせて、文字列の右側をスペースで埋めます。
5
6// 埋めたい元の文字列
7$originalString = "Hello";
8
9// 結果として得たい文字列の全長
10$targetLength = 10;
11
12// str_pad関数を使って文字列をスペースで埋めます。
13//
14// 引数1 ($string): 埋めたい元の文字列
15// 引数2 ($length): 結果の文字列の全長。元の文字列より短い場合は変更されません。
16// 引数3 ($pad_string): 埋めに使用する文字 (ここではスペース ' ')
17// 引数4 ($pad_type): 埋める方向 (STR_PAD_RIGHT は文字列の右側を埋めます)
18$paddedString = str_pad($originalString, $targetLength, ' ', STR_PAD_RIGHT);
19
20echo "元の文字列: '{$originalString}'\n";
21echo "埋め後の文字列: '{$paddedString}'\n";
22echo "結果の文字列長: " . strlen($paddedString) . "\n";
23
24?>

str_pad関数は、指定された長さになるまで文字列を埋めるために使用されるPHPの関数です。システム開発において、データの表示形式を揃えたり、特定のフォーマットに合わせたりする際に役立ちます。

このサンプルコードでは、「Hello」という文字列を最終的に10文字の長さにするために、右側をスペースで埋める具体的な方法を示しています。

最初の引数 $string には、埋めたい元の文字列「Hello」を渡します。 次の引数 $length には、結果として得たい文字列の全長「10」を指定します。もし元の文字列がこの長さを超える場合は、文字列は変更されずにそのまま返されます。 3番目の引数 $pad_string には、埋めに使用する文字を指定します。ここではキーワード「spaces」に合わせて半角スペース「' '」を指定しています。 最後の引数 $pad_type には、文字列のどの方向を埋めるかを定数で指定します。STR_PAD_RIGHTは文字列の右側を埋めることを意味します。他にも、左側を埋めるSTR_PAD_LEFTや、両側を埋めるSTR_PAD_BOTHがあります。

str_pad関数は、これらの引数に基づいて処理された、新しい埋め込み済み文字列を戻り値として返します。この例では、「Hello 」という文字列が得られ、その長さは正しく10文字となります。

str_pad関数は、文字列を指定した全長になるまで埋める機能です。利用の際は、第2引数の$lengthに元の文字列より短い値を指定しても、文字列は切り捨てられず、元の文字列がそのまま返される点に注意が必要です。STR_PAD_BOTHで左右から埋める場合、均等に埋められない際は右側が多く埋められます。また、日本語などのマルチバイト文字を含む文字列では、str_padがバイト数を基準とするため見た目の文字数とズレが生じます。この場合は、mb_str_pad関数など、マルチバイト対応の関数を利用することを検討しましょう。

PHP: str_padとsprintfでの文字列パディング

1<?php
2
3/**
4 * str_pad() と sprintf() を用いた文字列のパディングをデモンストレーションします。
5 *
6 * str_pad() は文字列を指定した長さに特定の文字で埋めることに特化しています。
7 * sprintf() は汎用的な書式設定関数で、特定の書式指定子を使ってパディングを行うこともできます。
8 */
9function demonstrateStringPaddingComparison(): void
10{
11    $originalString = "Hello";
12    $targetLength = 12; // 目標の文字列の長さ
13    $padCharacter = "-"; // str_pad() で使用する埋め文字
14
15    echo "元の文字列: '{$originalString}'\n";
16    echo "目標の長さ: {$targetLength}\n";
17    echo "埋め文字  : '{$padCharacter}'\n\n";
18
19    // --- str_pad() の使用例 ---
20    echo "--- str_pad() の使用例 ---\n";
21    echo "str_pad() は指定した文字で文字列を埋める専用の関数です。\n";
22    echo "左右、または両側に埋め込む柔軟性があります。\n\n";
23
24    // 1. 右側にパディング (デフォルト動作: STR_PAD_RIGHT)
25    $paddedRight = str_pad($originalString, $targetLength, $padCharacter, STR_PAD_RIGHT);
26    echo "右パディング ('{$padCharacter}'): '{$paddedRight}'\n"; // 例: 'Hello-------'
27
28    // 2. 左側にパディング (STR_PAD_LEFT)
29    $paddedLeft = str_pad($originalString, $targetLength, $padCharacter, STR_PAD_LEFT);
30    echo "左パディング ('{$padCharacter}'):  '{$paddedLeft}'\n"; // 例: '-------Hello'
31
32    // 3. 両側にパディング (STR_PAD_BOTH)
33    $paddedBoth = str_pad($originalString, $targetLength, $padCharacter, STR_PAD_BOTH);
34    echo "両側パディング ('{$padCharacter}'): '{$paddedBoth}'\n\n"; // 例: '---Hello----' (長さにより調整)
35
36    // --- sprintf() の使用例 ---
37    echo "--- sprintf() の使用例 ---\n";
38    echo "sprintf() は汎用的な書式設定関数で、特定の書式指定子でパディングも可能です。\n";
39    echo "文字列のパディングには通常スペースが使われます。数字のパディングでは '0' もよく使われます。\n\n";
40
41    // 1. 右側にスペースでパディング (文字列の場合)
42    // '%-Ns' の 'N' は目標の幅、'-' は左揃え (右にスペースを埋める) を意味します。
43    $sprintfRightPad = sprintf('%-'.$targetLength.'s', $originalString);
44    echo "sprintf (右スペースパディング):  '{$sprintfRightPad}'\n"; // 例: 'Hello       '
45
46    // 2. 左側にスペースでパディング (文字列の場合)
47    // '%Ns' の 'N' は目標の幅、デフォルトで右揃え (左にスペースを埋める) を意味します。
48    $sprintfLeftPad = sprintf('%'.$targetLength.'s', $originalString);
49    echo "sprintf (左スペースパディング):   '{$sprintfLeftPad}'\n\n"; // 例: '       Hello'
50
51    // 3. 左側にゼロでパディング (数字の場合によく使用)
52    // '%0Nd' の 'N' は目標の幅、'0' は左側にゼロを埋めることを意味します。'd' は整数を意味します。
53    $number = 123;
54    $numberTargetLength = 7;
55    $sprintfLeftZeroPad = sprintf('%0'.$numberTargetLength.'d', $number);
56    echo "sprintf (左ゼロパディング(数値)): '{$sprintfLeftZeroPad}'\n"; // 例: '0000123'
57
58    echo "\n--- まとめ ---\n";
59    echo "・特定の文字で柔軟にパディングしたい場合は str_pad() が最適です。\n";
60    echo "・スペースやゼロでパディングしつつ、他の書式設定も行いたい場合は sprintf() が便利です。\n";
61}
62
63// 関数を実行してデモンストレーションを表示
64demonstrateStringPaddingComparison();
65

PHPのstr_pad関数は、文字列を指定した長さに特定の文字で埋める(パディングする)ために特化した関数です。この関数は、元となる文字列($string)、目標の長さ($length)、埋める文字($pad_string、デフォルトはスペース)、そしてパディングの方向($pad_type、右・左・両側)を引数として受け取ります。実行されると、指定された文字でパディングされた新しい文字列を返します。例えば、"Hello"をハイフンで右側から埋めて12文字にすると、"Hello-------"のようになります。

これに対してsprintf関数は、より汎用的な書式設定を行う関数で、さまざまな型のデータを特定の書式に整形した文字列を返します。文字列のパディングにも利用でき、書式指定子(例: %Ns%0Nd)を使ってスペースやゼロで埋めることが可能です。例えば、"Hello"を12文字の長さで左にスペース埋めすると、" Hello"のようになりますし、数値の"123"をゼロ埋めで7桁にすると"0000123"となります。

このように、str_padは任意の文字で文字列を柔軟にパディングするのに最適です。一方、sprintfは、主にスペースやゼロでパディングしつつ、他のデータ型も含めてまとめて書式を整えたい場合に便利です。どちらの関数も、出力する文字列を見やすく整形する際に役立ちます。

str_padは、指定した任意の文字で文字列を左右または両側に埋めることに特化した関数です。埋め文字とパディング方向を引数で明確に指定できます。一方、sprintfは汎用的な書式設定関数であり、書式指定子を利用して文字列や数値をパディングできます。特にスペースやゼロでのパディングに適していますが、str_padのように任意の埋め文字を直接指定する柔軟性はありません。sprintfで異なる文字を埋める場合は書式指定子の工夫が必要となるため、ご注意ください。文字列のパディングを直感的に行いたい場合はstr_padを、スペースやゼロによるパディングを含め、より多様な書式設定を一度に行いたい場合はsprintfを選択すると良いでしょう。

関連コンテンツ

関連プログラミング言語