W3docs

count_chars()

La función count_chars() cuenta las ocurrencias de cada carácter en una cadena y devuelve un array o string según el modo especificado.

La función count_chars() de PHP informa, para cada posible valor de byte (0 a 255), cuántas veces aparece en una cadena. En lugar de analizar palabras o caracteres uno a uno, ofrece un resumen de frecuencias de toda la cadena en una sola llamada. Esto resulta útil para tareas como construir histogramas de caracteres, detectar qué caracteres usa una cadena o identificar rápidamente bytes inesperados en una entrada.

Esta página cubre la sintaxis, cada $mode y exactamente qué devuelve cada uno, un ejemplo práctico y los errores comunes (como las claves ASCII y el manejo de texto multibyte).

Sintaxis

count_chars(string $string, int $mode = 0): array|string
  • $string — la cadena a analizar.
  • $mode — controla la forma del resultado (por defecto 0). Consulta los modos a continuación.

Las claves devueltas por count_chars() son valores de byte (0–255), no los caracteres en sí. Por ejemplo, el byte 108 es la letra l. Usa chr() para convertir un valor de byte a su carácter, y ord() para hacer lo contrario.

Los cinco modos

ModoDevuelve
0Un array con los 256 valores de byte, incluso los que nunca aparecen (cuenta 0).
1Un array con solo los bytes que aparecen al menos una vez, indexado por valor de byte.
2Un array con solo los bytes que nunca aparecen (cuenta 0).
3Un string que contiene cada byte distinto utilizado, en orden ascendente.
4Un string que contiene cada byte que no fue utilizado.

Los modos 0, 1 y 2 devuelven un array; los modos 3 y 4 devuelven un string.

Ejemplo básico

El modo 1 es el que se usa con más frecuencia: lista solo los caracteres que realmente aparecen y cuántas veces lo hace cada uno.

php— editable, runs on the server

La salida es:

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

Cada clave es un valor de byte y cada valor es su conteo. Así, [108] => 3 significa que el byte 108 (la letra l) aparece tres veces, y [111] => 2 significa que o aparece dos veces. El espacio (32), la coma (44) y el signo de exclamación (33) también se cuentan.

Obtener salida legible con chr()

Como las claves son valores de byte, la salida sin procesar es difícil de leer. Convierte cada clave a su carácter con chr():

<?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);
}
?>

Salida:

' ' (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)

Modos 3 y 4: qué caracteres se usan (o no)

Cuando solo te importa qué caracteres aparecen —no cuántas veces—, los modos 3 y 4 devuelven un string compacto en lugar de un array.

<?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)
?>

El modo 3 es una forma rápida de obtener el conjunto de caracteres distintos en una cadena, ya ordenados.

Errores comunes

  • Las claves son bytes, no caracteres. Recuerda siempre que count_chars() indexa por valor de byte 0–255. Combínalo con chr() para obtener una salida legible.
  • No tiene soporte multibyte. Un carácter UTF-8 como é ocupa dos bytes, y count_chars() contará cada byte por separado en lugar del carácter completo. Para texto Unicode, es preferible usar mb_strlen() / preg_match_all().
  • El modo 0 es extenso. Siempre devuelve 256 entradas (la mayoría con cuenta 0), así que usa el modo 1 cuando solo quieras los caracteres que aparecen.

Funciones relacionadas

  • strlen() — longitud total de una cadena en bytes.
  • substr_count() — cuenta las ocurrencias de una subcadena (no de un solo byte).
  • str_word_count() — cuenta palabras en lugar de caracteres.
  • str_split() — divide una cadena en un array de caracteres.
  • ord() y chr() — convierten entre un carácter y su valor de byte.

Práctica

Práctica
¿Qué hace la función 'count_chars()' de PHP?
¿Qué hace la función 'count_chars()' de PHP?
Was this page helpful?