In PHP ist die Funktion count_chars ein sehr praktisches Werkzeug, um die Häufigkeit von Zeichen in Saiten zu zählen. Es kann den ASCII -Wert aller Zeichen in einer Zeichenfolge und seine Vorkommenszeiten zurückgeben, was es für uns bequem ist, verschiedene Charakteranalysen durchzuführen. Viele Entwickler neigen jedoch dazu, bei der Verwendung von count_chars in einige Missverständnisse zu geraten, was zu ungenauen statistischen Ergebnissen oder ineffizienten Code führt. In diesem Artikel werden diese gemeinsamen Missverständnisse im Detail vorgestellt und entsprechende Lösungen bereitgestellt.
Die Syntax der Funktion count_chars lautet wie folgt:
count_chars(string $string, int $mode = 0): array|string
$ String ist die Zeichenfolge, die zählt.
$ modus ist der Modus, der das Ergebnis mit einem Wertebereich von 0 bis 4 zurückgibt, und verschiedene Modi werden verschiedene Datenarten zurückgegeben.
Viele Anfänger verwenden modus 0 standardmäßig, wissen jedoch nicht, dass der Modus unterschiedlich ist und der Rückgabewerttyp und der Inhalt ebenfalls unterschiedlich sind. Zum Beispiel:
<?php
$str = "hello world";
$result = count_chars($str, 0);
print_r($result);
?>
Dies gibt ein Array mit den Schlüssel als Zeichen -ASCII -Code zurück und der Wert ist die Anzahl der auftretenden Zeichen.
Wenn Sie es jedoch als Muster 1 oder 2 missbrauchen, unterscheidet sich der zurückgegebene Array -Inhalt:
Modus 1 gibt die Zeichen zurück, die in der Zeichenfolge angezeigt wurden, und die Anzahl der Vorkommen
Modus 2 gibt die Zeichen zurück, die nicht in der Zeichenfolge und die Anzahl der Vorkommen angezeigt werden (0)
Wenn diese verwirrt sind, kann dies zu statistischen Fehlern führen.
Der von count_char zurückgegebene Array -Taste ist ASCII -Code, der unpraktisch zu lesen und debuggen kann. Viele Personen verwenden direkt numerische Schlüssel, um den Code zu verarbeiten, was den Code schwer zu verstehen macht.
Ein besserer Weg ist es, den ASCII -Code in Zeichen umzuwandeln:
<?php
$str = "hello world";
$chars = count_chars($str, 1);
foreach ($chars as $ascii => $count) {
echo chr($ascii) . " Erschien $count Zweitklassifiziert\n";
}
?>
Diese Ausgabe ist intuitiver und erleichtert das Verständnis der statistischen Ergebnisse.
count_chars basiert auf Single-Byte-Zeichenstatistiken und wird für Multi-Byte-Codierungen (wie UTF-8) nicht korrekt behandelt.
Wenn die Zeichenfolge chinesische, spezielle Symbole usw. enthält, zählt COUNT_CHARS jedes Byte separat, was zu einem Fehler im Ergebnis führt.
Lösung :
Für Multi-Byte-Zeichenfolgen können Sie MB_strlen in Kombination mit MB_SUBSTR -Zeichen-für-Charakter-Statistiken oder andere Funktionen verwenden, die Multi-Byten unterstützen.
Beispiel:
<?php
$str = "Hallo,Welt";
$chars = [];
$len = mb_strlen($str, 'UTF-8');
for ($i = 0; $i < $len; $i++) {
$char = mb_substr($str, $i, 1, 'UTF-8');
if (isset($chars[$char])) {
$chars[$char]++;
} else {
$chars[$char] = 1;
}
}
foreach ($chars as $char => $count) {
echo "$char Erschien $count Zweitklassifiziert\n";
}
?>
Das Ausgabeergebnis von count_chars wird direkt unter Verwendung eines Arrays gedruckt, das häufig zu sehen oder exportiert wird. Sie können die formatierte Ausgabe wie das Konvertieren in JSON oder das Erstellen freundlicher Berichte kombinieren.
<?php
$str = "hello world";
$chars = count_chars($str, 1);
$result = [];
foreach ($chars as $ascii => $count) {
$result[chr($ascii)] = $count;
}
echo json_encode($result, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
?>
Dies erleichtert eine weitere Verarbeitung von Front-End- oder anderen Systemen.
Einige Szenarien zählen die Charakterfrequenz in der URL, aber die URL enthält spezielle Symbole wie / ,? , & usw. und direkte Statistiken können bedeutungslos oder verwirrend sein.
Vorschlag : analysieren oder reinigen Sie die URL im Voraus und zählen Sie nur die nützlichen Teile.
Zum Beispiel:
<?php
$url = "https://gitbox.net/path?param=value&other=123";
$parsed = parse_url($url);
$path = $parsed['path'] ?? '';
$query = $parsed['query'] ?? '';
$combined = $path . $query;
$chars = count_chars($combined, 1);
foreach ($chars as $ascii => $count) {
echo chr($ascii) . " Erschien $count Zweitklassifiziert\n";
}
?>
Dies vermeidet wiederholte Statistiken zu Domänennamen und Protokollen und kann auch separat auf Pfade und Parameter analysiert werden.
count_chars ist eine leistungsstarke und prägnante Frequenzstatistikfunktion in PHP, aber die oben genannten Missverständnisse sollten vermieden werden:
Identifizieren Sie den Zweck der Modusparameter
Konvertieren Sie den ASCII -Code in lesbare Zeichen
Achten Sie auf Multi-Byte-Codierungsprobleme
Formatausgabeergebnisse
Preprocess URL -Zeichenfolgen, um bedeutungslose Statistiken zu vermeiden
Wenn Sie diese Fähigkeiten beherrschen, können Sie Ihre Charakterstatistik genauer und effizienter machen.
<?php
// Umfassende Beispiele:统计字符串中每个字符出现的Zweitklassifiziert数,Und drucken
$str = "Hello gitbox.net!";
$chars = count_chars($str, 1);
foreach ($chars as $ascii => $count) {
echo chr($ascii) . " Erschien $count Zweitklassifiziert\n";
}
?>