PHPで「同じ文字列を何回も繰り返して連結したい」というとき、もっとも手軽なのが str_repeat() 関数です。この記事では、str_repeat() を中心に、forループや配列関数を使う方法との使い分け、さらに回数に0や負の値を渡したときの挙動、区切り線や桁揃えといった実用例まで解説します。
この記事の結論:文字列の繰り返しは
str_repeat($string, $count) がもっともシンプルで高速です。回数に 0 を渡すと空文字、負の値はPHP 8以降でエラー(ValueError)になる点に注意します。str_repeat関数を使う(基本・推奨)
str_repeat() は第1引数の文字列を、第2引数の回数だけ繰り返した文字列を返します。もっとも簡潔で、処理速度も速い方法です。
str_repeat()の基本
<?php $string = "hello"; $result = str_repeat($string, 3); echo $result; // hellohellohello
1文字だけの繰り返しにも便利です。たとえば区切り線などにそのまま使えます。
区切り線をつくる
<?php
echo str_repeat("-", 20); // --------------------
echo str_repeat("=", 10); // ==========
回数に0や負の値を渡したときの挙動
繰り返し回数を変数で受け取る場合は、想定外の値に注意が必要です。
- 回数が
0… 空文字("")が返ります。 - 回数が負の値 … PHP 8.0以降は
ValueError例外が発生します。PHP 7では警告(Warning)を出して空文字を返していました。
0と負の値
<?php
echo "[" . str_repeat("ab", 0) . "]"; // [](空文字)
// 負の値:
// PHP 8.0+ → Uncaught ValueError: str_repeat(): Argument #2 ($times) must be greater than or equal to 0
// PHP 7 → Warning を出して "" を返す
$count = -1;
echo str_repeat("ab", max(0, $count)); // max(0, ...) で安全に防げる
回数がユーザー入力や計算結果のときは要注意です。負の値が入る可能性があるなら、
max(0, $count) のように下限を0に丸めるか、事前に if ($count > 0) でチェックしてから渡すと、PHP 8でのエラーを防げます。forループで連結する
繰り返しのたびに番号を付けたい、間に別の処理を挟みたいなど、単純な繰り返し以上のことをしたい場合はループが向いています。
forループで連結
<?php
$string = "hello";
$count = 3;
$result = "";
for ($i = 0; $i < $count; $i++) {
$result .= $string;
}
echo $result; // hellohellohello
ループ処理そのものの書き方は【PHP】ループ処理を行う方法、文字列の連結方法のバリエーションは【PHP】文字列結合のテクニックで詳しく解説しています。
array_fillとimplodeで連結する
繰り返した文字列を区切り文字でつなぎたい場合は、array_fill() で同じ要素の配列を作り、implode() で連結すると便利です。
区切り文字つきで繰り返す
<?php
$string = "hello";
$count = 3;
// 区切りなし(str_repeat と同じ結果)
echo implode("", array_fill(0, $count, $string)); // hellohellohello
// カンマ区切りにできるのがこの方法の利点
echo implode(", ", array_fill(0, $count, $string)); // hello, hello, hello
使い分けの目安:単純な繰り返しは
str_repeat()、間に処理を挟むならループ、区切り文字を入れたいなら array_fill()+implode() が向いています。桁揃え(パディング)はstr_padが便利
「指定の長さになるまで埋める」のが目的なら、繰り返し回数を計算するよりstr_pad() を使うほうが簡単です。str_repeat() は「回数」で繰り返すのに対し、str_pad() は「最終的な長さ」になるまで埋めるという違いがあります。
長さで埋めるならstr_pad
<?php
// 5文字になるまで右側を * で埋める
echo str_pad("ab", 5, "*"); // ab***
// 0埋めで桁を揃える
echo str_pad("7", 3, "0", STR_PAD_LEFT); // 007
長さを指定して埋める方法はstr_pad関数で特定の長さになるまで文字列を埋める方法、数値のゼロ埋めに特化した方法は【PHP】0埋めをする方法まとめを参照してください。
よくある質問(FAQ)
Q文字列を繰り返す一番シンプルな方法は?
A
str_repeat($string, $count) です。専用の関数なので最も簡潔で、処理速度も速く、単純な繰り返しならこれで十分です。Qstr_repeatに負の回数を渡すとどうなりますか?
APHP 8.0以降は
ValueError 例外になります。PHP 7では警告を出して空文字を返していました。負の値が入りうる場合は max(0, $count) などで0以上に補正してください。Q繰り返した文字列をカンマなどで区切りたいです。
A
implode(", ", array_fill(0, $count, $string)) を使います。str_repeat() は区切り文字を挟めないため、区切りが必要なときはarray_fill() と implode() の組み合わせが便利です。Q指定の文字数になるまで埋めたいときは?
A回数ではなく長さで埋めたいなら
str_pad() が適しています。str_pad("7", 3, "0", STR_PAD_LEFT) で「007」のように桁を揃えられます。まとめ
PHPで文字列を繰り返すときのポイントを整理します。
- 単純な繰り返しは
str_repeat($string, $count)が最もシンプルで高速 - 回数
0は空文字、負の値はPHP 8でエラー(max(0, $count)で防止) - 間に処理を挟むならforループ
- 区切り文字を入れるなら
array_fill()+implode() - 長さになるまで埋めるのは
str_repeatではなくstr_pad()
関連として、文字列結合のテクニック・str_padで文字列を埋める方法・0埋めをする方法もあわせて読むと、文字列の組み立てに強くなれます。

