【PHP】文字列を結合する方法|.演算子・変数展開・implode・sprintf

PHPで文字列を結合する方法はいくつもあり、2つをつなぐのか、配列をまとめるのか、書式を整えるのかで使い分けると、コードが読みやすくなります。この記事では基本のピリオド連結から、implodesprintf・ヒアドキュメントまで、用途別に解説します。

この記事の結論:2つの文字列は .(ピリオド)で連結。変数を文章に埋め込むならダブルクオート内の変数展開。配列をまとめるなら implode()、書式を整えるなら sprintf() が便利です。
スポンサーリンク

ピリオド(.)で連結する

最も基本的なのがピリオド演算子です。既存の変数に追記するには .= を使います(ループ内での組み立てに便利)。

. と .=
<?php
$first = "こんにちは";
$second = "世界";
echo $first . $second; // こんにちは世界

// .= で追記
$message = "これは";
$message .= "テスト";
$message .= "です。";
echo $message; // これはテストです。

ダブルクオート内の変数展開

ダブルクオート "..." の中では変数がそのまま展開されます。シングルクオート '...' では展開されません。変数名と後ろの文字を区切りたいときは波括弧 {} を使います。

変数展開と波括弧
<?php
$name = "太郎";
echo "こんにちは、$name!";   // こんにちは、太郎!
echo 'こんにちは、$name!';   // こんにちは、$name!(展開されない)

$fruit = "apple";
echo "これは {$fruit}s です"; // これは apples です({}で区切る)

配列をまとめて結合:implode

配列の要素を区切り文字でつなぐなら implode() が最適です。ピリオドで1つずつつなぐより簡潔で、CSV行の生成などに役立ちます。

implodeで配列を結合
<?php
$parts = ["2026", "06", "23"];
echo implode("-", $parts); // 2026-06-23

$items = ["りんご", "みかん", "ぶどう"];
echo implode("、", $items); // りんご、みかん、ぶどう
配列を文字列に変換する方法(implodeの詳細やネスト配列の扱い)は配列を文字列に変換する方法で詳しく解説しています。

書式を整えて結合:sprintf

「金額をカンマ区切りで」「ゼロ埋めして」など、書式を整えながら組み立てたい場合は sprintf() が読みやすくなります。プレースホルダ(%s%d など)に値を埋め込みます。

sprintfで整形して結合
<?php
$name = "太郎";
$score = 95;
echo sprintf("%sさんの得点は%d点です", $name, $score);
// 太郎さんの得点は95点です

// ゼロ埋めや桁揃えもできる
echo sprintf("ID: %05d", 42); // ID: 00042

複数行をまとめる:ヒアドキュメント

HTMLメールやテンプレートのように複数行の文字列を組み立てるなら、ヒアドキュメント(<<<)が読みやすいです。ダブルクオートと同様に変数が展開されます(展開させたくない場合はNowdoc <<<'EOT')。

ヒアドキュメント
<?php
$name = "太郎";
$body = <<<EOT
{$name} 様

ご登録ありがとうございます。
今後ともよろしくお願いいたします。
EOT;

echo $body;

補足:数値の結合と注意点

ピリオドで数値をつなぐと、自動的に文字列に変換されて連結されます。なお、PHP 8では . より + の方が優先順位が高くなったため、計算と連結を混在させるときは括弧で明示すると安全です。

数値の結合
<?php
echo "合計: " . (1 + 2);   // 合計: 3(括弧で計算を明示)
echo "番号" . 7;           // 番号7(数値は自動で文字列化)

よくある質問(FAQ)

Q文字列の結合は + ではないのですか?
APHPでは結合はピリオド . です。+ は数値の加算で、文字列に使うと数値変換が絡んで意図しない結果になります。連結には必ず .(追記は .=)を使ってください。
Qシングルクオートとダブルクオートの違いは?
Aダブルクオート "..." 内では変数が展開されますが、シングルクオート '...' 内では展開されず、そのまま表示されます。変数を埋め込みたいときはダブルクオート、リテラルな文字列ならシングルクオートが基本です。
Q配列を1つの文字列にまとめたいです。
Aimplode($区切り文字, $配列) を使います。implode("-", ["2026","06","23"])2026-06-23 になります。
Qループで文字列を組み立てると遅くなりますか?
APHPでは .= での追記は実用上問題ありません。ただし要素が配列にあるなら、$arr[] = ... でためてからimplode() でまとめる方が、意図が明確で扱いやすいことが多いです。

まとめ

PHPの文字列結合のポイントを整理します。

  • 2つの連結は .、追記は .=+ ではない)
  • 文章への埋め込みはダブルクオートの変数展開{} で区切る
  • 配列をまとめるなら implode()
  • 書式を整えるなら sprintf()
  • 複数行はヒアドキュメントが読みやすい

関連として、配列を文字列に変換する方法文字列を指定回数くり返す方法substrとmb_substrの使い方もあわせて読むと、PHPの文字列操作に強くなれます。