W3docs

count_chars()

Die PHP-Funktion count_chars() zählt, wie oft jedes Byte in einem string vorkommt, und gibt das Ergebnis je nach Modus als array oder string zurück.

Die PHP-Funktion count_chars() gibt für jeden möglichen Byte-Wert (0 bis 255) an, wie oft er in einem string vorkommt. Anstatt Wörter oder Zeichen einzeln zu betrachten, liefert sie mit einem einzigen Aufruf eine Häufigkeitsübersicht des gesamten Strings. Das macht sie praktisch für Aufgaben wie das Erstellen von Zeichen-Histogrammen, das Erkennen, welche Zeichen ein string verwendet, oder das schnelle Auffinden unerwarteter Bytes in einer Eingabe.

Diese Seite behandelt die Syntax, jeden $mode und genau das, was jeder Modus zurückgibt, ein ausgearbeitetes Beispiel sowie häufige Fallstricke (wie die ASCII-Schlüssel und den Umgang mit Multibyte-Text).

Syntax

count_chars(string $string, int $mode = 0): array|string
  • $string — der zu analysierende string.
  • $mode — steuert die Form des Ergebnisses (Standard 0). Siehe die Modi unten.

Die von count_chars() zurückgegebenen Schlüssel sind Byte-Werte (0–255), nicht die Zeichen selbst. Beispielsweise ist Byte 108 der Buchstabe l. Verwenden Sie chr(), um einen Byte-Wert wieder in sein Zeichen umzuwandeln, und ord() für den umgekehrten Weg.

Die fünf Modi

ModusRückgabewert
0Ein array für alle 256 Byte-Werte, auch solche, die nie vorkommen (Anzahl 0).
1Ein array nur der Bytes, die mindestens einmal vorkommen, als Schlüssel den Byte-Wert.
2Ein array nur der Bytes, die nie vorkommen (Anzahl 0).
3Ein string, der jedes verwendete Byte in aufsteigender Reihenfolge enthält.
4Ein string, der jedes nicht verwendete Byte enthält.

Die Modi 0, 1 und 2 geben ein array zurück; die Modi 3 und 4 geben einen string zurück.

Einfaches Beispiel

Modus 1 ist der am häufigsten verwendete — er listet nur die tatsächlich vorkommenden Zeichen und ihre jeweilige Häufigkeit auf.

php— editable, runs on the server

Die Ausgabe ist:

Array
(
    [32] => 1
    [33] => 1
    [44] => 1
    [72] => 1
    [87] => 1
    [100] => 1
    [101] => 1
    [108] => 3
    [111] => 2
    [114] => 1
)

Jeder Schlüssel ist ein Byte-Wert und jeder Wert ist dessen Anzahl. So bedeutet [108] => 3, dass Byte 108 (der Buchstabe l) dreimal vorkommt, und [111] => 2, dass o zweimal vorkommt. Das Leerzeichen (32), das Komma (44) und das Ausrufezeichen (33) werden ebenfalls gezählt.

Lesbare Ausgabe mit chr()

Da die Schlüssel Byte-Werte sind, ist die rohe Ausgabe schwer zu lesen. Konvertieren Sie jeden Schlüssel mit chr() zurück in sein Zeichen:

<?php
$string = "Hello, World!";
foreach (count_chars($string, 1) as $byte => $times) {
    printf("'%s' (byte %d) appears %d time(s)\n", chr($byte), $byte, $times);
}
?>

Ausgabe:

' ' (byte 32) appears 1 time(s)
'!' (byte 33) appears 1 time(s)
',' (byte 44) appears 1 time(s)
'H' (byte 72) appears 1 time(s)
'W' (byte 87) appears 1 time(s)
'd' (byte 100) appears 1 time(s)
'e' (byte 101) appears 1 time(s)
'l' (byte 108) appears 3 time(s)
'o' (byte 111) appears 2 time(s)
'r' (byte 114) appears 1 time(s)

Modi 3 und 4: welche Zeichen (nicht) verwendet werden

Wenn Sie nur wissen möchten, welche Zeichen vorkommen — und nicht wie oft — geben die Modi 3 und 4 einen kompakten string statt eines array zurück.

<?php
$string = "Hello, World!";

echo count_chars($string, 3) . "\n"; //  !,HWdelor
echo strlen(count_chars($string, 3)) . "\n"; // 10  (10 distinct bytes used)
echo strlen(count_chars($string, 4)) . "\n"; // 246 (256 - 10 = bytes never used)
?>

Modus 3 ist eine schnelle Möglichkeit, die Menge der eindeutigen Zeichen in einem string bereits sortiert zu erhalten.

Häufige Fallstricke

  • Schlüssel sind Bytes, keine Zeichen. Denken Sie immer daran, dass count_chars() nach Byte-Werten 0–255 indiziert. Kombinieren Sie es mit chr() für menschenlesbare Ausgabe.
  • Kein Multibyte-Bewusstsein. Ein UTF-8-Zeichen wie é besteht aus zwei Bytes, und count_chars() zählt jedes Byte einzeln statt das Zeichen als Ganzes. Für Unicode-Text bevorzugen Sie stattdessen mb_strlen() / preg_match_all().
  • Modus 0 ist groß. Er gibt immer 256 Einträge zurück (die meisten mit Anzahl 0); verwenden Sie daher Modus 1, wenn Sie nur die vorkommenden Zeichen benötigen.

Verwandte Funktionen

  • strlen() — Gesamtlänge eines Strings in Bytes.
  • substr_count() — Anzahl der Vorkommen eines Teilstrings (nicht eines einzelnen Bytes).
  • str_word_count() — Wörter statt Zeichen zählen.
  • str_split() — einen string in ein array von Zeichen aufteilen.
  • ord() und chr() — Umwandlung zwischen einem Zeichen und seinem Byte-Wert.

Übungen

Übung
Was macht die PHP-Funktion 'count_chars()'?
Was macht die PHP-Funktion 'count_chars()'?
Was this page helpful?