W3docs

count_chars()

La funzione count_chars() conta le occorrenze di ogni carattere in una stringa e restituisce un array o una stringa in base alla modalità scelta.

La funzione PHP count_chars() riporta, per ogni possibile valore di byte (da 0 a 255), quante volte compare in una stringa. Invece di analizzare parole o caratteri uno alla volta, fornisce una panoramica delle frequenze dell'intera stringa in una singola chiamata. Questo la rende utile per attività come la costruzione di istogrammi di caratteri, il rilevamento dei caratteri usati da una stringa, o la rapida individuazione di byte inattesi nell'input.

Questa pagina illustra la sintassi, tutte le modalità $mode e ciò che ciascuna restituisce, un esempio pratico e le insidie più comuni (come le chiavi ASCII e la gestione del testo multibyte).

Sintassi

count_chars(string $string, int $mode = 0): array|string
  • $string — la stringa da analizzare.
  • $mode — controlla il formato del risultato (predefinito 0). Vedi le modalità di seguito.

Le chiavi restituite da count_chars() sono valori di byte (0–255), non i caratteri stessi. Ad esempio, il byte 108 corrisponde alla lettera l. Usa chr() per convertire un valore di byte nel suo carattere, e ord() per fare il contrario.

Le cinque modalità

ModalitàRestituisce
0Un array per tutti i 256 valori di byte, anche quelli che non compaiono mai (conteggio 0).
1Un array con solo i byte che compaiono almeno una volta, indicizzato per valore di byte.
2Un array con solo i byte che non compaiono mai (conteggio 0).
3Una stringa contenente ogni byte distinto utilizzato, in ordine crescente.
4Una stringa contenente ogni byte che non è stato utilizzato.

Le modalità 0, 1 e 2 restituiscono un array; le modalità 3 e 4 restituiscono una stringa.

Esempio di base

La modalità 1 è quella più usata: elenca solo i caratteri che compaiono effettivamente e quante volte ciascuno appare.

php— editable, runs on the server

L'output è:

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

Ogni chiave è un valore di byte e ogni valore è il suo conteggio. Quindi [108] => 3 significa che il byte 108 (la lettera l) compare tre volte, e [111] => 2 significa che o compare due volte. Anche lo spazio (32), la virgola (44) e il punto esclamativo (33) vengono contati.

Ottenere un output leggibile con chr()

Poiché le chiavi sono valori di byte, l'output grezzo è difficile da leggere. Converti ogni chiave nel suo carattere 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);
}
?>

Output:

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

Modalità 3 e 4: quali caratteri sono (non) utilizzati

Quando ti interessa solo quali caratteri compaiono — non quante volte — le modalità 3 e 4 restituiscono una stringa compatta invece di 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)
?>

La modalità 3 è un modo rapido per ottenere l'insieme dei caratteri distinti di una stringa, già ordinati.

Insidie comuni

  • Le chiavi sono byte, non caratteri. Ricorda sempre che count_chars() indicizza per valore di byte da 0 a 255. Abbinala a chr() per un output leggibile.
  • Non è compatibile con il multibyte. Un carattere UTF-8 come é è composto da due byte, e count_chars() conterà ogni byte separatamente anziché il carattere nel suo insieme. Per testo Unicode, preferisci mb_strlen() / preg_match_all().
  • La modalità 0 è grande. Restituisce sempre 256 voci (la maggior parte con conteggio 0), quindi usa la modalità 1 quando vuoi solo i caratteri che compaiono.

Funzioni correlate

  • strlen() — lunghezza totale di una stringa in byte.
  • substr_count() — conta le occorrenze di una sottostringa (non di un singolo byte).
  • str_word_count() — conta le parole invece dei caratteri.
  • str_split() — suddivide una stringa in un array di caratteri.
  • ord() e chr() — conversione tra un carattere e il suo valore di byte.

Esercitati

Pratica
Cosa fa la funzione PHP 'count_chars()'?
Cosa fa la funzione PHP 'count_chars()'?
Was this page helpful?