Du liest:
PHP str_replace: Zeichenketten in PHP manipulieren

PHP str_replace: Zeichenketten in PHP manipulieren

von Patrick
06.05.2020
Jetzt PHP programmieren lernen

Oft arbeiten wir mit Zeichenketten, die mit Platzhaltern versehen sind oder Zeichen, die ersetzt werden müssen. Für diesen Anwendungsfall stellt uns PHP viele Funktionen zur Verfügung. Die Funktion, die ich hier vorstellen möchte, ist str_replace.

1. Einfaches ersetzen mit der PHP str_replace Funktion

Die Funktion str_replace akzeptiert 4 Parameter, von diesen ist einer optional.

str_replace ($needle, $replace, $haystack, &$count)
    $needle (erforderlich)
        Der gesuchte Wert
    $replace (erforderlich)
        Der Wert, der gefundene Werte ersetzt.
    $haystack (erforderlich)
        Die zu durchsuchende Zeichenkette.
    &$count (optional)
        Anzahl der durchgeführten Ersetzungen.

Du kannst für $needle, $replace und $haystack auch Arrays statt Strings übergeben.
Wie sich str_replace dann verhält, erkläre ich genauer im zweiten Teil des Artikels.

Der Parameter $count wird per Referenz übergeben.
Das heißt, dass der Wert von $count von der Funktion verändert werden kann.
Bedingung dafür ist, dass bei der Funktionsdefinition ein & vor dem Variablennamen angegeben wird.

Um nun einfach einen Teilstring in einem String zu ersetzen, kannst du str_replace so nutzen:

echo str_replace("world", "CodeCitrus", "Hello world!");
// Hello CodeCitrus!

Mit dem Parameter $count sieht das ganze nun so aus:

$i = 0;
echo str_replace("A", "B", "A B A C D", $i);
// B B B C D
echo $i;
// 2
echo str_replace("A", "B", "A B", $i);
// B B
echo $i;
// 1

2. PHP str_replace mit Arrays

Wenn du für die Parameter Arrays statt Strings angibst, werden mehrere Ersetzungen nacheinander durchgeführt.

$string = '1 2 3 4';
$suche = array('1', '2', '3', '4');
$ersetze = array('2', '3', '4', '5');
echo str_replace($suche, $ersetze, $string);
// 5 5 5 5

Das gleiche Ergebnis würdest du auch erhalten, wenn du die Ersetzungen einfach nacheinander durchführen würdest.

$string = '1 2 3 4';
$string = str_replace('1', '2', $string);
echo $string;
// 2 2 3 4
$string = str_replace('2', '3', $string);
echo $string;
// 3 3 3 4
$string = str_replace('3', '4', $string);
echo $string;
// 4 4 4 4
$string = str_replace('4', '5', $string);
echo $string;
// 5 5 5 5

Allerdings ist Vorsicht geboten, wenn das Array zur Ersetzung länger ist als das mit den Suchstrings.

$string = '1 2 3 4';
$suche = array('1', '2', '3', '4');
$ersetze = array('2', '3', '4');
echo str_replace($suche, $ersetze, $string);
//

Hier ist das Ergebnis ein leerer String, da, wenn zu einem Suchstring keine Ersetzung vorhanden ist, einfach ein leerer String genommen wird.
Das Ergebnis in diesem Fall ist nur komplett leer, da bei der letzten Ersetzung der String “4 4 4 4” enthalten würde.
Die letzte Ersetzung ersetzt jede einzelne 4 durch “”.

$string = '1 2 3 4';
$suche = array('1', '2');
$ersetze = array('2');
echo str_replace($suche, $ersetze, $string);
// 3 4

Wenn hingegen mehr Werte zur Ersetzung angegeben werden als Werte zur Suche, werden die überschüssigen Ersetzungswerte einfach nicht verwendet.

$string = '1 2 3 4';
$suche = array('1', '2');
$ersetze = array('2', '3', '4', '5');
echo str_replace($suche, $ersetze, $string);
// 3 3 3 4

Falls du statt in einem String in einem Array ersetzt, ist auch der Rückgabewert ein Array. Jeder Wert des Arrays wird auch hier einzeln ersetzt.

$array = array('1', '2', '3', '4');
$suche = array('1', '2', '3', '4');
$ersetze = array('2', '3', '4', '5');
print_r(str_replace($suche, $ersetze, $array));
// Array ( [0] => 5 [1] => 5 [2] => 5 [3] => 5 )

3. Weitere Ersetzungsmethoden

str_replace beachtet die Groß- und Kleinschreibung (=ist case sensitive). str_ireplace hingegen nicht, und kann daher genauso verwendet werden, wenn Groß- und Kleinschreibung ignoriert werden soll.

$suche = array('a', 'b', 'c');
$string = 'A B C';
echo str_replace($suche, '', $string);
// A B C
echo str_ireplace($suche, '', $string);
//

Mit der Funktion substr_replace kannst du den zu ersetzenden String mit der Index-Position angeben.

$string = "Hello world!";
$ersetze = 'CodeCitrus';
$start = 6;
echo substr_replace($string, $ersetze, $start);
// Hello CodeCitrus
$zu_ersetzende_laenge = 3;
echo substr_replace($string, $ersetze, $start, $zu_ersetzende_laenge);
// Hello CodeCitrusld!

4. Fazit

Einen Teilstring in einem String mit einem anderen String zu ersetzen ist einfach.
Die Möglichkeit str_replace mit Arrays aufzurufen, macht die Funktion noch flexibler.
Dies kann auch schnell zu sehr unübersichtlichem Code führen, ist daher mit Vorsicht zu genießen.
Um Groß- und Kleinschreibung zu ignorieren, kannst du str_ireplace verwenden.
Um statt einen zu ersetzenden Teilstring anzugeben, kannst du mit substr_replace einen Index angeben.

Wenn du noch Anmerkungen, Kritik oder Lob hast, schreib bitte einen Kommentar!



Bislang gibt es keine Kommentare. Markier dein Revier und sei der Erste!

Schreibe einen Kommentar

Das könnte dich auch interessieren

Jetzt PHP programmieren lernen
04.05.2020

Zeilenumbrüche in PHP

von