PHPプログラミングでは、出力をより明確かつ読みやすくするために、文字列出力をフォーマットする必要があることがよくあります。 PHPは、出力をフォーマットするさまざまな方法を提供します。最も一般的に使用されるのはSprintf関数です。 SPRINTF関数を使用してフォーマットされた文字列を作成し、出力コンテンツを整列させることができます。次に、 sprintf関数を使用して文字列アライメントを実現する方法を紹介します。
PHPのsprintf関数は、文字列出力をフォーマットするために使用され、その基本的な構文は次のとおりです。
sprintf(format, arg1, arg2, ...)
形式:出力文字列の形式を指定します。
arg1、arg2、... :フォーマット文字列のフォーマットコントローラーに従って、対応するパラメーターを渡します。
フォーマットされた文字列では、プレースホルダーを使用して、整数、浮動値、文字列などのパラメーターの形式を定義できます。
文字列アライメントにSprintf関数を使用する場合、主にフォーマット制御文字で幅とアライメントシンボルを使用します。具体的には、一般的に使用されるアライメントメソッドには、左調整、右整列、および中央調整が含まれます。
デフォルトでは、 Sprintfは出力コンテンツを右に整列します。他のフォーマットコントローラーを指定していない場合、 Sprintfは自動的にコンテンツを右に調整します。
<?php
$name = "Alice";
$age = 30;
echo sprintf("|%-10s|%-3d|\n", $name, $age);
?>
上記のコードでは、 %-10Sが文字列を左に位置合わせし、10文字の幅を占有し、 %-3Dは数を3文字の幅を占有します。
出力結果:
|Alice |30 |
コンテンツのままにしたい場合は、 -シンボルを使用できます。
<?php
$name = "Alice";
$age = 30;
echo sprintf("|%-10s|%-3d|\n", $name, $age);
?>
これにより、出力コンテンツが整列されたままになり、指定された幅が占められます。
|Alice |30 |
Sprintfはデフォルトでのセンタリグメントをサポートしていないため、センターアラインメントにはわずかに複雑な動作が必要です。ただし、幅を巧みに活用し、パディング文字を巧みに活用することにより、センターアライメントを実現できます。
<?php
function centerAlign($str, $width) {
$padding = $width - strlen($str);
$left = floor($padding / 2);
$right = ceil($padding / 2);
return str_repeat(" ", $left) . $str . str_repeat(" ", $right);
}
$name = "Alice";
$age = 30;
echo "|" . centerAlign($name, 10) . "|";
echo centerAlign($age, 3) . "|\n";
?>
この関数は、最初に左側と右側の空白の領域を計算し、次に文字列を中央に入力します。これにより、中心的なアライメントが実現されます。
出力結果:
| Alice | 30 |
時々、URLのような文字列を出力する必要がある場合があります。これには、調整のフォーマットが必要な場合があります。複数のURLとその説明を備えたリストがあるとします。 URLを整列させたいです。 SPRINTFを使用して、アライメントURL出力をフォーマットする例を次に示します。
<?php
$urls = [
"https://gitbox.net/first-url" => "First description",
"https://gitbox.net/second-url" => "Second description",
"https://gitbox.net/third-url" => "Third description"
];
echo sprintf("|%-35s|%-20s|\n", "URL", "Description");
echo str_repeat("-", 60) . "\n";
foreach ($urls as $url => $desc) {
echo sprintf("|%-35s|%-20s|\n", $url, $desc);
}
?>
このコードは、URLのリストを出力し、各URLが固定幅によって整列されるようにします。 URLのドメイン名をgitbox.netに置き換えたため、出力の結果は次のとおりです。
|URL |Description |
------------------------------------------------------------
|https://gitbox.net/first-url |First description |
|https://gitbox.net/second-url |Second description |
|https://gitbox.net/third-url |Third description |