Stringverarbeitung in PHP

Aus Vokabulabor
Version vom 18. November 2023, 19:01 Uhr von Hamatoma (Diskussion | Beiträge) (→‎Konversion)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Links

Zielsetzung

Strings sind Zeichenketten.

Ein ganz wesentlicher Teil von Programmierung ist das Arbeiten mit Strings:

  • Strings umwandeln
  • Suchen in Strings
  • Eigenschaften von Strings ermitteln.

Stringkonstanten

In PHP gibt es drei Möglichkeiten, Stringkonstanten zu definieren:

<?php
$a = 'Hello';
$b = "$a World\n";
$c = <<<EOS
<html>
<body>
<h1>$b</h1>
</body>
</html>
EOS;
  • $a = 'Hello';: die Stringkonstante mit Ticks ' wird nicht interpoliert: Variablen werden nicht erkannt, Metazeichen wie '\n' werden nicht erkannt.
  • $b = "$a World\n";: die Stringkonstante mit doppeltem Appostroph wird interpoliert: Variablen werden durch ihren Wert ersetzt, Metazeichen wie '\n' werden ersetzt.
  • $c = <<<EOS ... EOS;: Diese Form wird "Here-Document" genannt:
    • Der String beginnt mit "<<<" und einem Namen wie EOS.
    • Es folgen Zeilen, die zum String gehören.
    • Am Ende steht der obige Name (z.B. "EOS") und ein ';'
    • Diese Form wird eingesetzt, wenn viele Zeilen in einem String vorkommen.
    • Dieser String wird interpoliert: Variablen werden durch ihren Wert ersetzt, Metazeichen wie '\n' werden ersetzt.

Wichtige Funktionen mit String

Stringlänge ermitteln und Teilstrings bilden: strlen() und substr()

<?php
$a = "Hello world!";
// function strlen(string $string): int zählt die Anzahl der Zeichen in $string
echo 'Länge von $a": ', strlen($a), "\n"; 
// function  substr(string $string, int $offset, ?int $length = null): string schneidet $length Zeichen ab $offset aus $string:
echo 'substr($a, 3, 2): ', substr($a, 3, 2), "\n";
// $count kann weggelassen werden: dann wird der Rest genommen:
echo 'substr($a, 5): ', substr($a, 5), "\n";

Aufgaben

  • Schreibe eine Funktion maxString(string $string, int $maxLength), die $string zurückgibt, wenn der String kürzer als $maxLength ist, sonst nur die ersten $maxLength Zeichen.
  • Schreibe eine Funktion lastChar(string $string), die das letzte Zeichen zurückgibt oder "", wenn $string leer ist.

Suche mit strpos() und strrpos()

<?php
$a = "Hello world!";
// function strpos(string $haystack, string $needle, int $offset=0) liefert den Index des ersten Treffers nach dem Offset $offset
echo "strpos('$a', 'l', 4): ", strpos($a, "l", 4), "\n";
// $offset kann weggelassen werden: dann ist $offset 0:
echo "strpos('$a', 'l', 4): ", strpos($a, "l"), "\n";
// function strrpos(string $haystack, string $needle, int $offset=0) liefert den letzten Treffer v
echo "strrpos('$a', 'l'): ", strrpos($a, "l"), "\n";
if (strpos($a, 'world') !== false){
  echo "'$a' enthält 'world'\n";
} else {
  echo "'$a' enthält NICHT 'world'\n";
}
echo "Varianten, die die Groß/Kleinschreibung ignorieren:\n";
// function stripos(string $haystack, string $needle, int $offset=0) liefert den Index des ersten Treffers nach dem Offset $offset
echo "stripos('$a', 'World', 4): ", stripos($a, 'World', 4), "\n";
//  strripos(string $haystack, string $needle, int $offset = 0): int|false
echo "strripos('<HTML><BODY>Hi World</BODY></HTML>', 'body'): ", strripos('<HTML><BODY>Hi World</BODY></HTML>', 'body'), "\n";

Aufgaben

  • Definiere eine Funktion, die aus einem HTML-Text den Titel herausfindet und zurückgibt.
    • Teste mit "<html><head><title>Wow</title><body></body></html"
  • Definiere eine Funktion, die wesentliche Fehler in einer EMail-Adresse vermeidet.

Umwandeln in oder aus Array: explode() und implode()

<?php
$a = "Dies ist ein Satz mit mehreren Wörtern";
// function explode(string $separator, string $string, int $limit = PHP_INT_MAX): array Zerlegt einen String in ein Array.
$words = explode(' ', $a);
foreach ($words as $w){
  echo $w, "\n";
}
echo 'Das erste und das letzte Wort: ', $words[0], ' / ', $words[count($words) - 1], "\n";
// function implode(string $separator, array $array): string: Setzt einen String aus einem Array zusammen:
echo implode('-', $words), "\n";

Aufgaben

  • Formuliere eine Funktion, die aus einer Pfadangabe, beispielsweise "/etc/nginx/sites-available/wiki.hamatoma.de", den Dateinamen, hier "wiki.hamatoma.de" ermittelt.
    • Teste mit /home/ck
    • Teste mit: /etc/nginx/sites-available/wiki.hamatoma.de
    • Teste mit /home
  • Formuliere eine Funktion, die aus einer Pfadangabe, beispielsweise "/etc/nginx/sites-available/wiki.hamatoma.de", den Verzeichnispfad, hier "/etc/nginx/sites-available", ermittelt.
  • Formuliere eine Funktion, die die Anzahl der Wörter eines Strings ermittelt: Wörter werden durch ' ' getrennt.
    • Teste mit "Ich kann endlich Wörter in einem Satz zählen!".

Eigenschaften testen:

  • str_contains(): Testen, ob ein Teilstring in einem String ist
  • str_ends_with(): Testen, ob ein Teilstring am Ende eines Strings ist
  • str_start_with(): Testen, ob ein Teilstring am Anfang eines Strings ist
  • str_cmp(): Zwei Strings vergleichen: Liefert positive Zahl, wenn "größer", 0, wenn gleich, negativ wenn "kleiner"
  • str_ncmp(): Zwei Strings vergleichen, aber nur die ersten paar Zeichen: Liefert positive Zahl, wenn "größer", 0, wenn gleich, negativ wenn "kleiner"
<?php
// str_contains(string $haystack, string $needle): bool
echo "str_contains('Eine Ananas', 'ana'): ", str_contains('Eine Ananas', 'ana'), "\n";
// str_ends_with(string $haystack, string $needle): bool
echo "str_ends_with('chapter.txt', '.txt'): ", str_ends_with('chapter.txt', '.txt'), "\n";
// str_starts_with(string $haystack, string $needle): bool
echo "str_starts_with('https://hamatoma.de', 'http'): ", str_starts_with('https://hamatoma.de', 'http'), "\n";
// strcmp(string $string1, string $string2): int
echo "strcmp('abc', 'xyz'): ", strcmp('abc', 'aba'), "\n";
echo "strcmp('abc', 'aba'): ", strcmp('abc', 'aba'), "\n";
// strncmp(string $string1, string $string2, int $length): int
echo "strncmp('Hallo Herr', 'Hallo Frau', 5): ", strncmp('Hallo Herr', 'Hallo Frau', 5), "\n";
echo "strncmp('Hallo Herr', 'Hallo Frau', 7): ", strncmp('Hallo Herr', 'Hallo Frau', 7), "\n";

Aufgaben

  • Schreibe eine Funktion, die prüft, ob eine URL einer Webseite aus Deutschland kommt oder nicht. Wenn ja, diese URL ausgeben, sonst nicht.

Konversion

  • strtolower(): In Kleinbuchstaben wandeln
  • strtoupper(): In Großbuchstaben wandeln
  • str_replace(): einen Teilstring durch einen anderen ersetzen
  • str_ireplace(): einen Teilstring durch einen anderen ersetzen. Groß-/Kleinschreibung ignorieren.
  • str_repeat(): einen String vervielfachen
  • trim(): vorgegebene Zeichen, beispielsweise Leerzeichen, am Anfang und am Ende entfernen
  • ltrim(): vorgegebene Zeichen, beispielsweise Leerzeichen, am Anfang (left) entfernen
  • rtrim(): vorgegebene Zeichen, beispielsweise Leerzeichen, am Ende (right) entfernen
<?php
// strtolower(string $string): string
echo "strtolower('MeinBild.jpg'): ", strtolower('MeinBild.jpg'), "\n";
// str_repeat(string $string, int $times): string
echo "str_repeat('x', 10): ", str_repeat('x', 10), "\n";
// str_ireplace(array|string $search, array|string $replace, string|array $subject, int &$count = null): string|array
echo "str_ireplace('jpg', 'jpg', 'home.JPG'): ", str_ireplace('jpg', 'jpg', 'home.JPG'), "\n";
// str_replace(array|string $search, array|string $replace, string|array $subject, int &$count = null): string|array
echo "str_replace('.txt', '.doc', 'example.txt'): ", str_replace('.txt', '.doc', 'example.txt'), "\n";
// trim(string $string, string $characters = " \n\r\t\v\x00"): string
echo "trim('   10.200  '): ", trim('   10.200  '), "\n";
echo "trim('/abc/def/', '/'): ", trim('/abc/def/', '/'), "\n";
// rtrim(string $string, string $characters = " \n\r\t\v\x00"): string
echo "rtrim('   10.200  '): ", rtrim('   10.200  '), "\n";
// ltrim(string $string, string $characters = " \n\r\t\v\x00"): string
echo "ltrim('   10.200  '): ", ltrim('   10.200  '), "\n";

Aufgaben

  • Schreibe eine Funktion correct(), die einen Text bekommt. Wenn der Text "z.B" enthält, soll das durch "beispielsweise" ersetzt werden. "quasi" soll entfernt werden. " ?" soll durch "?" und " ." durch "." ersetzt werden.
    • Teste mit "Hier muss eine Farbe, z.B. rot, eingesetzt werden. Das ist quasi der Standard."
    • Teste mit "Kommst du ? Ich freue mich ."
  • Schreibe eine Funktion, die eine Prozentzahl als Balken aus "=" ausgibt. Für jedes Prozent ein '='. Der Balken soll immer 100 Zeichen lang sein. Die restlichen Zeichen sollen Punkte '.' sein.
    • Teste mit 10%, 99%