Hace unos días estaba en Facebook y alguien solicitó un ejercicio en PHP que decía algo así:
Crear el código necesario para contar las letras de una cadena en PHP e imprimir la letra seguido de las veces que aparece. Por ejemplo:
A=10
B=20
Hoy vengo a mostrar el código.
Contar letras de cadena en PHP
El ejercicio tenía sus requisitos y uno de ellos era no usar arreglos y otras funciones que no recuerdo, así que lo que hice fue crear una cadena con todas las letras del abecedario:
<?php
$letras = "abcdefghijklmnopqrstuvwxyz";
$letras .= strtoupper($letras);
Cuando ya tenía las letras, recorría la cadena y dentro de ese ciclo tenía otro ciclo que recorría al texto al cual se le contarían las letras:
<?php
for ($i = 0; $i < strlen($letras); $i++) {
$letra = $letras[$i];
$contador = 0;
for ($x = 0; $x < strlen($texto); $x++) {
$actual = $texto[$x];
if ($actual === $letra) {
// Letra encontrada :)
}
}
}
Como se puede ver, se inicia un contador en cada letra del abecedario, después se comprueba cuántas veces aparece y se aumenta un contador. Finalmente, si el contador es mayor a 0, se imprime la letra con su conteo.
Código completo para contar letras de string en PHP
El código con una demostración queda así:
<?php
/*
____ _____ _ _ _
| _ \ | __ \ (_) | | |
| |_) |_ _ | |__) |_ _ _ __ _____| |__ _ _| |_ ___
| _ <| | | | | ___/ _` | '__|_ / | '_ \| | | | __/ _ \
| |_) | |_| | | | | (_| | | / /| | |_) | |_| | || __/
|____/ \__, | |_| \__,_|_| /___|_|_.__/ \__, |\__\___|
__/ | __/ |
|___/ |___/
Blog: https://parzibyte.me/blog
Ayuda: https://parzibyte.me/blog/contrataciones-ayuda/
Contacto: https://parzibyte.me/blog/contacto/
Copyright (c) 2020 Luis Cabrera Benito
Licenciado bajo la licencia MIT
El texto de arriba debe ser incluido en cualquier redistribucion
*/ ?>
<?php
$texto = "Programar en PHP es realmente sencillo, como contar del 1 al 10";
echo "Contando letras de: '$texto'\n";
$letras = "abcdefghijklmnopqrstuvwxyz";
$letras .= strtoupper($letras);
for ($i = 0; $i < strlen($letras); $i++) {
$letra = $letras[$i];
$contador = 0;
for ($x = 0; $x < strlen($texto); $x++) {
$actual = $texto[$x];
if ($actual === $letra) {
$contador++;
}
}
if ($contador > 0) {
echo "$letra=";
echo $contador;
echo "\n";
}
}
Y al ejecutar se ve así:
Como lo dije, fue de acuerdo al ejercicio solicitado; si quieres algo más rápido podrías ver este ejemplo en Java usando hashmap.
Te invito a leer más sobre PHP en mi blog.