Start · Sprachen · PHP · Referenz · count_chars

count_chars

Funktion

Gibt Informationen über die in einem String enthaltenen Zeichen (Bytes) zurück – entweder als Array mit Häufigkeiten oder als String mit ein-/nicht-verwendeten Zeichen.

seit PHP 4.0.0 Kategorie: string

Signatur

count_chars(string $string, int $mode = 0): string|array

Beschreibung

count_chars() analysiert einen String auf Byte-Ebene und zählt das Vorkommen jedes der 256 möglichen Byte-Werte (0–255). Das Verhalten der Funktion wird über den Parameter mode gesteuert, der bestimmt, in welchem Format und mit welchem Inhalt das Ergebnis zurückgegeben wird.

Die Modi 0–2 liefern jeweils ein Array, bei dem die Schlüssel die ASCII-Werte (0–255) repräsentieren. Modus 0 enthält alle Zeichen mit ihrer Häufigkeit, Modus 1 nur die tatsächlich vorkommenden Zeichen und Modus 2 nur die Zeichen, die nicht im String vorkommen. Die Modi 3 und 4 hingegen geben einen String zurück: Modus 3 enthält alle im String vorhandenen eindeutigen Zeichen, Modus 4 alle Zeichen, die im String nicht vorkommen.

Typische Anwendungsgebiete sind die Häufigkeitsanalyse von Texten, das Finden verwendeter oder nicht verwendeter Zeichen, einfache Kryptographie-Übungen sowie die Validierung von Zeichensätzen in Eingabestrings.

Wichtig: Die Funktion arbeitet rein auf Byte-Ebene und ist nicht multibyte-sicher. Bei UTF-8-Strings mit Zeichen außerhalb des ASCII-Bereichs werden die einzelnen Bytes gezählt, nicht die vollständigen Zeichen (Code Points).

Parameter

Name Typ Default Beschreibung
$string Pflicht string Der zu analysierende Eingabe-String.
$mode int 0 Legt das Rückgabeformat fest:
  • 0 – Array mit allen 256 Byte-Werten als Schlüssel und ihrer Häufigkeit (0 für nicht vorkommende) als Wert.
  • 1 – Array nur mit Byte-Werten, die mindestens einmal vorkommen.
  • 2 – Array nur mit Byte-Werten, die nicht vorkommen (Häufigkeit immer 0).
  • 3 – String aller im Eingabe-String enthaltenen eindeutigen Zeichen.
  • 4 – String aller Zeichen, die im Eingabe-String nicht vorkommen.

Rückgabewert

Typ
string|array
Beschreibung
Bei den Modi 0, 1 und 2 wird ein array zurückgegeben, bei den Modi 3 und 4 ein string. Bei einem ungültigen mode-Wert gibt die Funktion false zurück.

Beispiele

Häufigkeit aller vorkommenden Zeichen ermitteln (Modus 1)

<?php
$text = 'Hallo Welt!';
$haeufigkeiten = count_chars($text, 1);

foreach ($haeufigkeiten as $byte => $anzahl) {
    printf("Zeichen '%s' (ASCII %d) kommt %d Mal vor.\n", chr($byte), $byte, $anzahl);
}
Zeichen ' ' (ASCII 32) kommt 1 Mal vor. Zeichen '!' (ASCII 33) kommt 1 Mal vor. Zeichen 'H' (ASCII 72) kommt 1 Mal vor. Zeichen 'W' (ASCII 87) kommt 1 Mal vor. Zeichen 'a' (ASCII 97) kommt 1 Mal vor. Zeichen 'e' (ASCII 101) kommt 1 Mal vor. Zeichen 'l' (ASCII 108) kommt 3 Mal vor. Zeichen 'o' (ASCII 111) kommt 1 Mal vor. Zeichen 't' (ASCII 116) kommt 1 Mal vor.

Nicht verwendete Zeichen als String ausgeben (Modus 4)

<?php
$passwort_kandidat = 'abc123XYZ';
$nicht_verwendet = count_chars($passwort_kandidat, 4);

echo "Im String nicht enthaltene Zeichen (Auswahl):\n";
// Nur druckbare ASCII-Zeichen (32–126) filtern
$druckbar = array_filter(
    str_split($nicht_verwendet),
    fn($c) => ord($c) >= 32 && ord($c) <= 126
);
echo implode('', $druckbar);
Im String nicht enthaltene Zeichen (Auswahl): !"#$%&'()*+,-./:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX[\]^_`defghijklmnopqrstuvwxyz{|}~

Zeichenhäufigkeit für einfache Kryptanalyse (Modus 0)

<?php
$text = 'das ist ein einfacher beispieltext';
$alle = count_chars($text, 0);

// Nur Buchstaben ausgeben
foreach (range(ord('a'), ord('z')) as $ascii) {
    if ($alle[$ascii] > 0) {
        echo chr($ascii) . ': ' . str_repeat('|', $alle[$ascii]) . ' (' . $alle[$ascii] . ')' . PHP_EOL;
    }
}
a: ||| (3) b: | (1) d: | (1) e: ||||| (5) f: | (1) h: | (1) i: |||| (4) n: || (2) p: | (1) r: | (1) s: |||| (4) t: ||| (3) x: | (1)

// Wichtig · Fallstricke

Multibyte-Einschränkung: count_chars() ist nicht für multibyte-kodierte Strings (z. B. UTF-8) geeignet. Zeichen außerhalb des ASCII-Bereichs werden als mehrere Einzel-Bytes gezählt, was zu falschen Ergebnissen führt. Für multibyte-sichere Zeichenanalyse sollte man mb_*-Funktionen oder manuelle Verarbeitung mit preg_split() und dem u-Flag verwenden.

Bei einem ungültigen mode-Wert (außerhalb von 0–4) gibt die Funktion false zurück und erzeugt eine Warnung.