【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// 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を選択すると良いでしょう。