Funktion count_chars() - Anzahl der verwendeten Zeichen in einem String ermitteln

In Strings sind in der Regel viele Zeichen enthalten, über die man gewisse Informationen benötigt. Häufig muss ermittelt werden, wie oft ein Teil-String in einer Zeichenkette enthalten ist. So kann man beispielsweise feststellen, ob eine E-Mailadresse das Zeichen @ nur einmal enthält. Hierbei gibt es mehrere Möglichkeiten. Für das bloße Zählen kann man die Funktion substr_count() oder die Multibyte-Funktion mb_substr_count() verwenden.

Eine sehr spezielle Funktion zum Zählen ist count_chars(). Die Besonderheit hierbei ist, dass man nicht nur einen Teil-String zählt, sondern alle Zeichen mit den ASCII-Werten 0 - 255 aus dem ASCII-Zeichensatz. Es ist auch möglich festzustellen, welche Zeichen der String nicht enthält. Die Parameter werden wie folgt gesetzt.

  1. Der String, von dem die Informationen benötigt werden (string).
  2. Ein Integer-Wert, mit dem der Modus für den Rückgabewert angegeben wird (mode, optional).

Der Rückgabewert der Funktion ist ein Array und muss daher mit geeigneten Mitteln wie foreach() oder printr() ausgelesen werden. Im folgenden Code wird die Variable $str überprüft. Der zweite Parameter wird nicht angegeben, sodass der Standardwert 0 gilt. Damit erhält man ein indiziertes Array mit den Zählwerten aller Zeichen (0 - 255) aus dem ASCII-Zeichensatz. Für die Zeichen a, b und c sind das die Indexe für die ASCII-Werte 97, 98 und 99, die jeweils den Wert 1 enthalten. Für eine bessere Übersicht der einzelnen Array-Elemente sollte man das Ergebnis des Codes im Quelltext betrachten.

<?php

$str = 'abc';

// Rückgabewert in Array speichern
$arr = count_chars($str);

// Ausgabe ... [97] => 1 [98] => 1 [99] => 1 ...
print_r($arr);

?>

Als zweiten Parameter kann man einen Integer-Wert 0 bis 4 angeben. Diese haben folgende Bedeutung.

  • 0: Standard, falls nichts angegeben wird. Rückgabewert ist ein Array mit den Indexen aller Zeichen aus dem ASCII-Zeichensatz (0 bis 255) sowie den dazugehörigen Zählwerten.
  • 1: Ein Array mit den Indexen, die einen Zählwert von 1 oder größer enthalten.
  • 2: Ein Array mit den Indexen, die einen Zählwert von 0 haben.
  • 3: Eine Zeichenkette mit allen vorkommenden Zeichen.
  • 4: Eine Zeichenkette mit allen nicht vorkommenden Zeichen.

Im folgenden Beispielcode ist der Rückgabewert ein Array mit den Indexen 97, 98 und 99.

<?php

$str = 'abc';

// Rückgabewert in Array speichern
$arr = count_chars($str, 1);

// Ausgabe Array ( [97] => 1 [98] => 1 [99] => 1 )
print_r($arr);

?>

Im nächsten Beispiel werden alle Array-Elemente mit den Indexen 0 bis 255 ausgegeben, mit Ausnahme von 97, 98 und 99.

<?php

$str = 'abc';

// Rückgabewert in Array speichern
$arr = count_chars($str, 2);

// Ausgabe aller Indexe außer 97, 98 und 99
print_r($arr);

?>

Im folgenden Code ist der Rückgabewert die Zeichenkette abc.

<?php

$str = 'abc';

// Rückgabewert in Array speichern
$arr = count_chars($str, 3);

// Ausgabe abc
print_r($arr);

?>

Der folgende Code bewirkt die Ausgabe aller Zeichen aus dem ASCII-Zeichensatz mit Ausnahme von a, b und c.

<?php

$str = 'abc';

// Rückgabewert in Array speichern
$arr = count_chars($str, 4);

// Ausgabe aller Zeichen außer a, b und c
print_r($arr);

?>

Die funktion count_chars() ist nur darauf ausgelegt, Zeichen aus dem ASCII-Zeichensatz zu zählen. Verwendet man jedoch Multibyte-Zeichen in der Zeichenkodierung UTF-8, funktioniert das Zählen nicht wie eigentlich vorgesehen.

<?php

$str = 'äöü';

// Rückgabewert in Array speichern
$arr = count_chars($str, 1);

// Ausgabe Array ( [164] => 1 [182] => 1 [188] => 1 [195] => 3 )
print_r($arr);

?>

Falls die Funktion count_chars() in Verbindung mit UTF-8 benötigt wird, kann man eine eigene Funktion schreiben.