【PHP】文字列を指定回数くり返す方法|str_repeatの使い方・0や負の値の挙動まで

【PHP】文字列を指定した回数繰り返し連結する方法 PHP

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文字列を繰り返す一番シンプルな方法は?
Astr_repeat($string, $count) です。専用の関数なので最も簡潔で、処理速度も速く、単純な繰り返しならこれで十分です。
Qstr_repeatに負の回数を渡すとどうなりますか?
APHP 8.0以降は ValueError 例外になります。PHP 7では警告を出して空文字を返していました。負の値が入りうる場合は max(0, $count) などで0以上に補正してください。
Q繰り返した文字列をカンマなどで区切りたいです。
Aimplode(", ", 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埋めをする方法もあわせて読むと、文字列の組み立てに強くなれます。