PHP: una funzione per sapere qual’è la lettera più ripetuta in una parola.

Sicuramente a tutti noi è successo di voler sapere a tutti i costi qual’è la lettera o le lettere più ricorrenti all’interno di una parola.

Prendiamo ad esempio la parola “banana”, sapere che la a appare 3 volte potrebbe avere una utilità devastante nella nostra vita.
Certo il gioco la vale la candela, e quindi eseguire le complesse operazioni per ottenere il risultato potrebbe non essere tempo sprecato.
Ora io misero uomo come potrei risolvere manualmente il problema?
Mi viene in mente che potrei scrivere la parola su un foglietto, e cominciare a scorrerla lettera per lettera, se la lettera è “nuova”, cioè è la prima volta che appare nella parola la segno a un lato, se non è nuova, l’avrò già segnata a lato e ci metto un più vicino.
Quando sarò arrivato alla fine della parola già ha colpo d’occio sarò in grado di dire quale lettera appare di più, quella con più “+” sarà la più ricorrente.
Ok il metodo funziona, ci ne sono di migliori?
Non c’ho pensato, questo mi piace, ora provo a trasformarlo da metodo umano a metodo informatico utilizzando il PHP come linguaggio per scrivere il codice..

La prima cosa che facevamo “umanamente” era quella di scorrere una ad una tutte le lettere della parola, traduciamolo in PHP.

for($i=0;$i

Cicliamo non c'è dubbio! L'utilizzo della funzione strlen() applicata a $word fa si che cicliamo un numero di volte pari alla lunghezza della parola.
Ora vogliamo fare come facevamo "a mano", se è la prima volta che inctriamo una lettera la scirviamo al lato del foglio, altrimenti ci mettiamo un "+" accanto.

$appArray = array();
for($i=0;$i

Ovviamente il foglietto non esiste in php e lo dobbiamo simulare in qualche modo, useremo l'array di appoggio $appArray, quello che faremo è aggiungere la lettera nuova come indice dell'array se la lettera non esite:
$appArray[$word{$i}]=1;
oppure aggiungere il "+" accanto:
$appArray[$word{$i}]++;
per controllare se la lettera è nuova o meno utilizziamo questo if:
if (array_key_exists($word{$i},$appArray))

La funzione array_key_exists() ci dice se la chiave di un array associativo esiste o meno. Se esiste vuol dire che dobbiamo incrementare il numero di volte che l'abbiamo trovata, se non esiste vuol dire che è la prima volta che la troviamo e quindi aggingiamo una "casella" all'array e gli assegnamo valore 1.

Alla fine del ciclo for avremo un array che contiene tutte le lettere diverse della parola e le loro occorrenze.

E questo punto esegiamo queste altre 2 istruzioni:

asort($appArray);
$max = end($appArray);

Con asort() abbiamo ordinato l'array in modo che la cella con il valore più grande sia l'ultima, e poi usando la funzione end(), abbiamo memorizzato tale valore nella variabile $max.

A questo volgiamo stampare tutte le lettere che appaiono il maggior numero di volte e quante volte appaiono:

foreach ($appArray as $k => $v){
    if ($v==$max) echo "La lettera $k appare $v volte
"; }

Quello che facciamo è scorrere tutto l'array e stampare le lettere con maggior numero di occorrenze e il numero stesso delle occorrenze.

Di seguito tutto il condice insieme e messo all'interno di una funzione.

function maxLetter($word){
    $appArray = array();
    for($i=0;$i $v){
        if ($v==$max) echo "La lettera $k appare $v volte<br />";
    }
}