Just for fun.... senza nessun ciclo....
codice:
<?php
function frequenzaCar(&$item,$key,$lenTesto) {
$pc = ($item / $lenTesto) * 100 ;
print "Carattere $key appare $item ".($item == 1 ? "volta" : "volte")." sia il ".sprintf("%01.2f",$pc)." %
\n";
}
//------- Array delle consonanti, vocali e cifre
// Questo equivale a str_split di PHP 5
$array_cons = preg_split('//', "BCDFGHJKLMNPQRSTVWXZ", -1, PREG_SPLIT_NO_EMPTY);
$array_voca = preg_split('//', "AEIOUY", -1, PREG_SPLIT_NO_EMPTY);
$array_cifr = preg_split('//', "0123456789", -1, PREG_SPLIT_NO_EMPTY);
//------- Testo da analizzare
$mioTesto = "salve a tutti sono contento di cantare alla Scala alle 19 e 300 martedi 28";
//------- Metto il testo un maiuscole
$mioTestoU = strtoupper($mioTesto);
//------- Questo equivale a str_split di PHP 5
$arrLettere = preg_split('//', $mioTestoU, -1, PREG_SPLIT_NO_EMPTY);
//------- Ricavo le Consonanti usate nel testo
$res_cons = array_intersect ( $arrLettere , $array_cons);
//------- Ricavo le Vocali usate nel testo
$res_voca = array_intersect ( $arrLettere , $array_voca);
//------- Ricavo le Cifre usate nel testo
$res_cifr = array_intersect ( $arrLettere , $array_cifr);
//------- Risultato : N° di consonanti, vocali e cifre
print "<hr>Il testo \"$mioTesto\" contiene :
\n";
$num_cons = count($res_cons);
$num_voca = count($res_voca);
$num_cifr = count($res_cifr);
print "$num_cons consonanti, $num_voca vocali e $num_cifr cifre per un totale di ".count($arrLettere)." caratteri.
\n";
//------- Frequenza dei caratteri - conto il numero di ogni valore per le consonanti, le vocali e le cifre
$conta_cons = array_count_values ($res_cons);
$conta_voca = array_count_values ($res_voca);
$conta_cifr = array_count_values ($res_cifr);
//------- Ordinamento alfabetico
ksort($conta_cons);
ksort($conta_voca);
ksort($conta_cifr);
//------- Frequenza della A (maiuscola)
print "<hr>Ci sono ".$conta_voca["A"]." A nel testo.
\n";
//------- Frequenza di tutti i caratteri
print "<hr>Frequenza dei caratteri :
\n";
print "* Consonanti :
\n";
array_walk($conta_cons,'frequenzaCar',count($arrLettere));
print "* Vocali :
\n";
array_walk($conta_voca,'frequenzaCar',count($arrLettere));
print "* Cifre :
\n";
array_walk($conta_cifr,'frequenzaCar',count($arrLettere));
?>