Trennlinien in einem Konsolen-Report, Rahmen für eine ASCII-Tabelle oder ein Test-String mit exakt 100.000 Zeichen: solche Aufgaben lassen sich in PHP mit einer einzigen Zeile erledigen, statt eine Schleife zu bauen. Dieses Tutorial zeigt die passende Funktion mit Syntax, Sonderfällen und einem Blick auf die Performance.
Was macht die Funktion PHP str_repeat()?
Wer in PHP eine Trennlinie unter einem Konsolen-Report braucht, einen ASCII-Tabellenrahmen aufbaut oder einen Test-String mit definierter Länge erzeugen will, kommt schnell zu PHP str_repeat. Die Funktion nimmt einen Eingabe-String und eine Anzahl entgegen und liefert das Ergebnis der n-fachen Aneinanderhängung zurück. Damit ersetzt sie eine for-Schleife mit Konkatenation und macht den Code in einer Zeile lesbar.

Bevor die Syntax, die Sonderfälle bei 0 und negativen Werten und der Performance-Vergleich folgen, ein einfaches Beispiel zur Mechanik.
Die Mechanik ist denkbar einfach. Aus str_repeat('-', 30) wird ein String aus 30 Bindestrichen, aus str_repeat('PHP ', 3) wird 'PHP PHP PHP '. Damit wird PHP str_repeat zum klassischen Helfer für alles, was wiederholungsbasiert aufgebaut werden muss, von Trennstrichen über Padding-Vorbereitungen bis hin zu Last-Test-Strings.
Syntax und Rückgabewert
Die Signatur ist einer der kürzesten der String-Funktionen. PHP str_repeat erwartet genau zwei Argumente: den zu wiederholenden String und die Anzahl der Wiederholungen.
<?php
str_repeat(string $string, int $times): string
Der Rückgabewert ist ein neuer String, der die Wiederholungen enthält. Wer einen leeren String wiederholt, bekommt erwartungsgemäß wieder einen leeren String. Wer den Original-String einmal bekommt, ruft mit $times = 1 auf. Die Funktion arbeitet intern in C und ist deutlich schneller als eine PHP-Schleife mit .= Konkatenation, was sie zur ersten Wahl für wiederkehrende Aufgaben macht.
Verhalten bei 0 und negativen Werten
Drei Sonderfälle sollten bewusst sein. Bei $times = 0 liefert PHP str_repeat einen leeren String, nicht den Original-String. Bei $times = 1 kommt der Originalstring zurück. Bei einem negativen Wert wirft die Funktion seit PHP 8 einen ValueError, vorher gab es eine Warnung und einen leeren String.
<?php
echo '|' . str_repeat('PHP', 0) . '|' . "\n";
/* || (leer) */
echo '|' . str_repeat('PHP', 1) . '|' . "\n";
/* |PHP| */
try {
echo str_repeat('PHP', -1);
} catch (ValueError $e) {
echo $e->getMessage();
/* str_repeat(): Argument #2 ($times) must be greater than or equal to 0 */
}
Wer aus Variablen rechnet, sollte das Ergebnis vor der Übergabe prüfen. Ein typischer Fall ist die Padding-Berechnung $ziel - strlen($wert), die negativ wird, wenn der Eingabe-String bereits länger ist als die Ziellänge. Eine max(0, $diff)-Klammer schützt vor unerwarteten Exceptions.
Trennlinien für CLI-Ausgaben
Der wahrscheinlich häufigste Anwendungsfall ist die Erzeugung einer Trennlinie in einem Konsolen-Report. Drei Aufrufe von PHP str_repeat reichen, um einen sauberen Header mit Rahmen zu setzen.
<?php
$titel = ' Tagesreport 15.05.2026 ';
echo str_repeat('=', 50) . "\n";
echo str_pad($titel, 50, ' ', STR_PAD_BOTH) . "\n";
echo str_repeat('=', 50) . "\n";
/* ==================================================
Tagesreport 15.05.2026
================================================== */
Die Kombination mit str_pad() ist hier besonders wirkungsvoll, weil str_pad das eigentliche Auffüllen übernimmt und PHP str_repeat den Rahmen liefert. Wer mehrere Sektionen im selben Skript braucht, kapselt das in eine kleine Helper-Funktion und gewinnt sofort an Lesbarkeit.
ASCII-Header und Tabellenrahmen
Ein zweiter Klassiker sind ASCII-Tabellen mit Spalten unterschiedlicher Breite. PHP str_repeat erzeugt die Trennzellen, ein implode bindet sie zusammen.
<?php
$breiten = [20, 12, 10];
$trenner = '+' . implode('+', array_map(
fn($b) => str_repeat('-', $b),
$breiten
)) . '+';
echo $trenner . "\n";
/* +--------------------+------------+----------+ */
Wer das Pattern erweitert, kann ohne großen Aufwand eine vollständige ASCII-Tabelle bauen, in der Header, Datenzeilen und Trenner sich abwechseln. Für kleine Reports, CLI-Tools und Cron-Berichte ist das oft die schnellste Lösung, ohne eine externe Bibliothek einzubinden.
Padding-Generierung als Helfer
Auch wenn str_pad() für Padding-Aufgaben die spezialisierte Variante ist, lohnt sich der Blick auf PHP str_repeat als Helfer. Wer mit eigenen Pad-Strings oder komplexen Mustern arbeitet, kommt mit der Kombination beider Funktionen schnell zum Ziel.
<?php
$wert = '42';
$ziel = 8;
$fehlend = max(0, $ziel - strlen($wert));
$padded = str_repeat('0', $fehlend) . $wert;
echo $padded;
/* 00000042 */
Diese Variante ist kein Ersatz für str_pad, hilft aber, das Konzept dahinter zu verstehen. Im echten Code sollte für Standard-Padding str_pad() genutzt werden, weil es die drei Pad-Modi und die Default-Werte sauber abbildet. PHP str_repeat kommt dann ins Spiel, wenn ein wiederholtes Muster anders aufgebaut werden muss.
Performance: str_repeat vs. for-Schleife
Wer sich fragt, ob die Funktion wirklich schneller ist als eine eigene Schleife, kann das mit ein paar Zeilen testen. Die Differenz wird mit großen Anzahlen schnell sichtbar.
<?php
$start = microtime(true);
$out = str_repeat('x', 100000);
$dauer1 = microtime(true) - $start;
$start = microtime(true);
$out = '';
for ($i = 0; $i < 100000; $i++) {
$out .= 'x';
}
$dauer2 = microtime(true) - $start;
printf(
"str_repeat: %.4f s\nSchleife: %.4f s",
$dauer1, $dauer2
);
/* str_repeat ist deutlich schneller, oft Faktor 50+ */
Der Unterschied liegt im Speichermanagement. Die Schleifenkonkatenation muss bei jedem .= einen neuen String erzeugen und den alten kopieren, weil PHP-Strings unveränderlich sind. PHP str_repeat reserviert einmal den Zielspeicher und schreibt das Muster direkt hinein. Mit der eingebauten microtime-Funktion lässt sich der Effekt im eigenen Projekt nachstellen.
Praxisanwendungen Test-Daten
Wer Performance-Tests schreibt oder Datenbankindizes mit langen Strings prüft, nutzt PHP str_repeat als bequemen Generator. Aus einem kurzen Stück Text wird mit einer Zeile ein langer Block.
<?php
$kurzText = 'Ein Beispieltext, der wiederholt wird. ';
$grosserText = str_repeat($kurzText, 1000);
echo strlen($grosserText) . ' Zeichen' . "\n";
/* 39000 Zeichen */
/* fuer Lasttests einer Volltextsuche */
echo substr($grosserText, 0, 80) . '...';
Solche Test-Daten sind in Unit-Tests, Integration-Tests oder Profile-Runs Gold wert. Sie sind reproduzierbar, kostenfrei und schnell zu generieren. Wer zufällige Texte braucht, kombiniert PHP str_repeat mit random_bytes() oder einem Lorem-Ipsum-Helfer und gewinnt damit eine variable Test-Pipeline.
Welchen Weg die Funktion je nach übergebener Anzahl einschlägt, fasst das folgende Diagramm zusammen.
flowchart TD
A[Eingabe-String] --> B[Anzahl Wiederholungen N]
B --> C{N > 0?}
C -->|ja| D[N-fache Wiederholung im C-Kern]
C -->|0| E[leerer String]
C -->|negativ| F[ValueError]
D --> G[Ergebnis-String]
E --> G
Fazit
Mit PHP str_repeat steht ein kompakter und schneller Helfer zur Verfügung, der Wiederholungs-Patterns in einer einzigen Zeile erzeugt. Die Funktion glänzt bei Trennlinien, ASCII-Tabellenrahmen, Padding-Vorbereitungen und Test-Daten. Im Vergleich zu einer for-Schleife mit Konkatenation ist sie nicht nur lesbarer, sondern auch deutlich performanter, weil sie intern in C arbeitet und einmaligen Speicher reserviert. Wer die drei Sonderfälle bei $times = 0, 1 und negativen Werten kennt, ist auf der sicheren Seite und kann PHP str_repeat als verlässlichen Standard-Baustein in jeder Konsolen-Anwendung und jedem Performance-Test einsetzen.