PHP에서 Count_chars 함수는 문자열의 문자 주파수를 계산하는 매우 실용적인 도구입니다. 문자열에서 모든 문자의 ASCII 값과 발생 시간을 반환 할 수 있으므로 다양한 문자 분석을 수행하는 것이 편리합니다. 그러나 많은 개발자들은 count_chars를 사용할 때 약간의 오해에 빠지기 쉽기 때문에 통계 결과가 부정확하거나 비효율적 인 코드가 발생합니다. 이 기사는 이러한 일반적인 오해를 자세히 소개하고 해당 솔루션을 제공합니다.
count_chars 함수의 구문은 다음과 같습니다.
count_chars(string $string, int $mode = 0): array|string
$ string은 계산할 문자열입니다.
$ 모드 는 값 범위가 0 ~ 4 인 결과를 반환하는 모드이며 다른 모드는 다른 유형의 데이터를 반환합니다.
많은 초보자는 기본적으로 모드 0을 사용하지만 모드가 다르고 반환 값 유형과 콘텐츠도 다릅니다. 예를 들어:
<?php
$str = "hello world";
$result = count_chars($str, 0);
print_r($result);
?>
이것은 문자 ASCII 코드로 키가있는 배열을 반환하고 값은 발생하는 문자 수입니다.
그러나 패턴 1 또는 2로 오용하면 반환 된 배열 내용이 다릅니다.
모드 1은 문자열에 나타난 문자와 발생 횟수를 반환합니다.
모드 2는 문자열에 나타나지 않는 문자와 발생 횟수 (0)를 반환합니다.
이것들이 혼란 스러우면 통계적 오류로 이어질 수 있습니다.
count_chars 에 의해 반환 된 배열 키는 ASCII 코드이며, 이는 읽고 디버그하는 데 불편합니다. 많은 사람들이 직접 숫자 키를 사용하여 코드를 처리하므로 코드를 이해하기 어렵습니다.
더 좋은 방법은 ASCII 코드를 문자로 변환하는 것입니다.
<?php
$str = "hello world";
$chars = count_chars($str, 1);
foreach ($chars as $ascii => $count) {
echo chr($ascii) . " 나타났습니다 $count 2 차\n";
}
?>
이 출력은 더 직관적이며 통계 결과를 더 쉽게 이해할 수 있습니다.
Count_chars 는 단일 바이트 문자 통계를 기반으로하며 다중 바이트 인코딩 (예 : UTF-8)에 대해 올바르게 처리되지 않습니다.
문자열에 중국어, 특수 기호 등이 포함 된 경우 Count_chars는 각 바이트를 별도로 계산하여 결과에 오류가 발생합니다.
해결책 :
멀티 바이트 문자열의 경우 MB_SUBSTRLEN을 MB_Substr 문자 별 통계와 결합하거나 다중 바이트를 지원하는 다른 기능을 사용할 수 있습니다.
예:
<?php
$str = "안녕하세요,세계";
$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 나타났습니다 $count 2 차\n";
}
?>
count_chars 의 출력 결과는 배열을 사용하여 직접 인쇄되며, 이는 종종 보거나 내보내는 데 불편합니다. JSON으로 변환하거나 친숙한 보고서를 생성하는 등 형식의 출력을 결합 할 수 있습니다.
<?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);
?>
이것은 프론트 엔드 또는 기타 시스템의 추가 처리를 용이하게합니다.
일부 시나리오는 URL의 문자 주파수를 계산하지만 URL에는 / ,와 같은 특수 기호가 포함되어 있습니까 ? & 등, 직접 통계는 의미가 없거나 혼란 스러울 수 있습니다.
제안 : 미리 URL을 구문 분석하거나 청소하고 유용한 부분 만 계산하십시오.
예를 들어:
<?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) . " 나타났습니다 $count 2 차\n";
}
?>
이는 도메인 이름과 프로토콜에 대한 반복 통계를 피하고 경로 및 매개 변수에 대해 별도로 분석 할 수도 있습니다.
Count_chars 는 PHP의 강력하고 간결한 문자 주파수 통계 기능이지만 위의 오해는 피해야합니다.
모드 매개 변수의 목적을 식별하십시오
ASCII 코드를 읽을 수있는 문자로 변환하십시오
다중 바이트 인코딩 문제에주의하십시오
형식 출력 결과
무의미한 통계를 피하기 위해 전처리 URL 문자열
이러한 기술을 마스터하면 캐릭터 통계가보다 정확하고 효율적 일 수 있습니다.
<?php
// 포괄적 인 예:统计字符串中每个字符出现的2 차数,그리고 인쇄
$str = "Hello gitbox.net!";
$chars = count_chars($str, 1);
foreach ($chars as $ascii => $count) {
echo chr($ascii) . " 나타났습니다 $count 2 차\n";
}
?>