veröffentlicht am: 08.05.2020 zuletzt aktualisiert am: 07.02.2023
Manchmal stellt sich bei der Ausführung eines Skriptes die Frage, wie lang ein String ist, welche Größe er im Speicher hat.In PHP stehen uns hier für die verschiedenen Anwendungsfälle einige Möglichkeiten zur Verfügung.Im Folgenden versuche ich die Wichtigsten davon in Beispielen möglichst ansprechend und beschreibend darzustellen.
Mit der Funktion strlen kannst du dir die Größe eines Strings in Bytes ausgeben lassen.
strlen($string) $string Der string wird auf seine Länge hin untersucht
Für viele Strings mag dieser Wert gleich der Zeichenlänge sein, allerdings ist dies bei manchen Sprachen nicht der Fall.
$hello_world = 'Hello World'; echo strlen($hello_world); // 11 // Hello World auf Japanisch $utf8 = "こんにちは世界"; echo strlen($utf8); // 21
Im vorherigen Beispiel ist ein String auf Japanisch mit 7 Zeichen abgebildet.Das Ergebnis von strlen ergibt allerdings das dreifache.
Mit utf8_decode kannst du einen String von UTF-8 nach ISO-8859-1 konvertieren. Dabei werden die nicht in ISO-8859-1 existieren oder nicht gültig in UTF-8 sind durch ‚?‘ ersetzt.Um die Anzahl an Zeichen in einem String zu zählen, ist diese Konvertierung meist ausreichend.
$utf8 = "こんにちは世界"; echo strlen(utf8_decode($utf8)); // 7
Da ein Byte nur aus 8 bits besteht, kann dieser maximal 256 (2^8) einzigartige Werte haben.Dies kommt uns in die Quere, wenn wir Strings in Sprachen überprüfen, deren Zeichen nicht mit einem Byte gespeichert repräsentiert werden können.Um diese Art String zu behandeln, stellt uns PHP die Funktion mb_strlen zur Verfügung.
mb_strlen($string, $zeichenkodierung) $string (erforderlich) Der String, dessen Länge zurückgegeben wird $zeichenkodierung (optional) Angewendete Zeichenenkodierung Standardwert ist die interne Zeichenkodierung
Diese Funktion gibt die Anzahl der Zeichen im String mit der angegebenen Zeichenkodierung zurück. Ein Multibyte Zeichen wird hierbei als 1 gezählt.
echo mb_strlen("こんにちは世界"); // 7
Du kannst in der Funktion mb_strlen die Zeichenkodierung als zweiten Parameter übergeben.Wenn du hier eine gültige, für deinen String jedoch unpassende Zeichenkodierung angibst, können die Ergebnisse durchaus variieren.
echo mb_strlen("こんにちは世界", 'utf-8'); // 7 echo mb_strlen("こんにちは世界", 'Big5'); // 11 echo mb_strlen("こんにちは世界", 'utf-32'); // 5
Wenn du als Zeichenkodierung einen ungültigen Wert übergibst, erhältst du eine Fehlermeldung und als Rückgabewert false.
var_dump(mb_strlen("こんにちは世界", 'utf-4')); // Warning: mb_strlen(): Unknown encoding "utf-4" in C:\...\string_length.php on line 53 // bool(false)
Mit der Funktion mb_internal_encoding kannst du erfragen welche die interne Zeichenkodierung ist und diese ändern.
echo mb_internal_encoding("UTF-8"); // 1 echo mb_internal_encoding(); // UTF-8
Auch hier erhältst du eine Fehlermeldung und false als Rückgabewert, wenn du diese mit einer ungültigen Kodierung aufrufst.
var_dump(mb_internal_encoding('utf-4')); // Warning: mb_internal_encoding(): Unknown encoding "utf-4" in C:\...\string_length.php on line 59 // bool(false)
Die Funktion iconv_strlen hat den gleichen Zweck wie mb_strlen: Du kannst mit ihr Multibyte Zeichen zählen.
echo iconv_strlen("こんにちは世界"); // 1 echo iconv_strlen("こんにちは世界", "UTF-8"); // 1
Der wesentliche Unterschied zwischen mb_strlen und iconv_strlen ist der Umgang mit schlechten Zeichenfolgen.Während mb_strlen diese ignoriert, gibt iconv_strlen einen Fehler zurück.
$string = "\xe9"; echo mb_strlen($string,'utf-8'); // 1 echo iconv_strlen($string,'utf-8'); // iconv_strlen(): Detected an incomplete multibyte character in input string in C:\...\string_length.php on line 74
Mit der Funktion substr_count kannst du in Erfahrung bringen, wie oft sich ein Teilstring in einem String befindet.
substr_count($heuhaufen, $nadel, $versatz, $laenge) $heuhaufen (erforderlich) String, in dem gesucht wird $nadel (erforderlich) Der gesuchte Teilstring $versatz (optional) Der Punkt ab dem im String gesucht wird Bei negativem Wert wird vom Ende des Strings gezählt $laenge (optional) Maximale Länge nach $versatz Negative Länge zählt vom Ende des $heuhaufen
Wenn $versatz und $laenge zusammen größer als die Stringlänge sind, wird eine Warnung ausgegeben.Wenn du substr_count mit zwei Parametern aufrufst, erhältst du als Rückgabewert die Anzahl der Vorkommen des Teilstrings $nadel.
$string = 'Code Citrus Citrus Code Citrus'; echo substr_count($string, 'Citrus'); // 3
Mit Angabe des Versatz kannst du bestimmen, von welcher Indexposition an der String nach dem Teilstring durchsucht werden soll.
echo substr_count($string, 'Citrus', 11); // 2
Im vorigen Beispiel wurde der hier dick unterlegte Teil des Strings untersucht:‚Code Citrus Citrus Code Citrus‚Mit dem vierten Parameter kannst du bestimmen, wie viele Zeichen nach dem angegebenen Versatz auf den Teilstring untersucht werden sollen.
In diesen beiden Beispielen wurden folgende Teilstrings untersucht:‚Code Citrus Citrus Code Citrus‘‚Code Citrus Citrus Code Citrus‘Du kannst sowohl für den dritten als auch den vierten Parameter negative Zahlen übergeben. Bei negativem Versatz wird ein Wert relativ zum Ende des Strings statt vom Anfang angenommen.
$string = 'phpphpphp'; echo substr_count($string, 'php', -6); // 2
Das entspricht diesem Teilstring: ‚phpphpphp‚Dasselbe gilt für die Länge.
echo substr_count($string, 'php', -6, -3); // 1
Hier wurde nur dieser Teil untersucht: ‚phpphpphp‘
Die Funktion count_chars zählt das Vorkommen einzelner Zeichen in einem String. Die Ergebnisse variieren je nach verwendetem Modus.
count_chars($string, $modus) $string (erforderlich) Der String dessen Zeichen gezählt werden $modus (optional) Wert der Angibt, wie das Ergebnis zurückgegeben wird Standardwert ist 0
Wenn du an count_chars nur einen String übergibst, erhältst du als Rückgabewert ein Array mit allen Byte-Werten und der Anzahl an Vorkommnisse des zugehörigen Buchstaben.
$string = 'CodeCitrus'; print_r(count_chars($string));
Output (gekürzt):
Array( [0] => 0 [1] => 0 … [100] => 1 [101] => 1 … [254] => 0 [255] => 0 )
Wenn du beim Aufruf der Funktion $modus auf 1 setzt, erhältst du ein ähnliches Array, allerdings nur mit Werten, die auch im String vorhanden sind.
print_r(count_chars($string, 1));
Array( [67] => 2 [100] => 1 [101] => 1 [105] => 1 … )
count_chars($string, 2) gibt ein Array mit allen Bytewerten der verwendeten Zeichen zurück, die nicht in dem String vorhanden sind.Mit 3 für $modus erhalten wir einen String mit allen verwendeten Buchstaben.
echo count_chars($string, 3); // Cdeiorstu
Mit $modus = 4 gibt count_chars einen String mit allen nicht verwendeten Zeichen aus.Hier eine kurze Übersicht über die 5 möglichen Modi:
0 – Array mit Byte-Werten als Schlüssel und Häufigkeit als Wert1 – wie 0, allerdings nur Werte, die mindestens einmal vorkommen2 – wie 0, allerdings nur Werte, die nicht vorkommen3 – String mit allen vorkommenden Zeichen4 – String mit allen nicht vorkommenden Zeichen
Mit str_word_count kannst du die Anzahl an Wörtern in einem String zählen.
str_word_count($string, $format, $zeichenliste) $string Der String der gezählt wird $format (optional) Das Format, in dem die Rückgabe erfolgt $zeichenliste (optional) Zeichen, die als Bestandteile von Worten betrachtet werden
Der einfache Aufruf, mit nur einem String als Parameter, gibt die Anzahl gefundenen Wörter als Integer zurück.
echo str_word_count('foo bar baz'); // 3
Wenn du als zweiten Parameter 1 oder 2 angibst, erhältst du als Rückgabewert ein Array mit allen gefundenen Worten.Bei 2 wird zusätzlich als Schlüssel für die Worte die Position im String angegeben.
0 – Anzahl gefundener Wörter als Integer1 – Array mit allen gefundenen Wörtern2 – Array, dessen Schlüssel die Position des Wortes angibt
Hier ein Beispiel für 1 und 2:
print_r(str_word_count($string, 1)); // Array ( [0] => foo [1] => bar [2] => baz ) print_r(str_word_count($string, 2)); // Array ( [0] => foo [4] => bar [8] => baz )
Mit dem dritten Parameter, $zeichenliste, kannst du Zeichen angeben, die als Bestandteile von Worten betrachtet werden.Normalerweise würde die Angabe von Zahlen ein Word trennen.
$string = 'foo5bar baz'; echo str_word_count($string); // 3 print_r(str_word_count($string, 1)); // Array ( [0] => foo [1] => bar [2] => baz ) print_r(str_word_count($string, 2)); // Array ( [0] => foo [4] => bar [8] => baz )
Wenn du 5 als Teil eines Wortes in $zeichenliste festlegst, wird dieses dadurch nicht mehr geteilt.
echo str_word_count($string, 0, '5'); // 2 print_r(str_word_count($string, 1, '5')); // Array ( [0] => foo5bar [1] => baz ) print_r(str_word_count($string, 2, '5')); // Array ( [0] => foo5bar [8] => baz )
Um die Länge eines Strings in Bytes zu ermitteln, gibt es strlen.Mit mb_strlen und iconv_strlen kann die Anzahl Zeichen in einem Multibyte String ermittelt werden.Wie oft ein Teilstring in einem String auftaucht, kannst du mit substr_count erfragen. Informationen über die verwendeten Zeichen kannst du mit count_chars abfragen.Die Anzahl von Wörtern in einem String kannst du mit str_word_count ermitteln.
Wenn du Fragen oder Anmerkungen hast, schreib es in die Kommentare!
😩 Gelangweilt von den Udemy & YouTube-Tutorials?!
Lerne spielerisch Python, Java & SQL und komme deiner gutbezahlten (und an der 🌴 liegenden) Traumkarriere einen Schritt weiter.
"Für Leute die gerne Python oder Java lernen wollen ist Codegree klasse. Ist nicht wie bei anderen Konkurrenten auf Videokursen aufgebaut..."
- Lennart Sparbier
100% kostenlos registrieren · keine Kreditkarte notwendig
Im Gegensatz zu der Abendschule oder der alteingesessenen Uni lernst du bei codegree die Sprachen & Pakete, die wirklich im Jobmarkt gesucht werden.
100% kostenlos registrieren · keine Zahlungsdaten notwendig