PHP имеет расширенные функции массива , которые делают большую часть тяжелой работы для этого:
$keys = range('a', 'z');
$values = array_fill(0, 26, 0);
$freq = array_combine($keys, $values);
$word = "saapas";
$len = strlen($word);
for ($i=0; $i<$len; $i++) {
$letter = strtolower($word[$i]);
if (array_key_exists($letter, $freq)) {
$freq[$letter]++;
}
}
print_r($freq);
Выход:
Array
(
[a] => 3
[b] => 0
[c] => 0
[d] => 0
[e] => 0
[f] => 0
[g] => 0
[h] => 0
[i] => 0
[j] => 0
[k] => 0
[l] => 0
[m] => 0
[n] => 0
[o] => 0
[p] => 1
[q] => 0
[r] => 0
[s] => 2
[t] => 0
[u] => 0
[v] => 0
[w] => 0
[x] => 0
[y] => 0
[z] => 0
)
Если вы хотите различать прописные и строчные буквы, попробуйте:
$keys = array_merge(range('a', 'z'), range('A', 'Z'));
$values = array_fill(0, 52, 0);
$freq = array_combine($keys, $values);
$word = "saApas";
$len = strlen($word);
for ($i=0; $i<$len; $i++) {
$letter = $word[$i];
if (array_key_exists($letter, $freq)) {
$freq[$letter]++;
}
}
print_r($freq);
Или для подсчета любых символов:
$freq = array();
$word = "saApas";
$len = strlen($word);
for ($i=0; $i<$len; $i++) {
$letter = $word[$i];
if (array_key_exists($letter, $freq)) {
$freq[$letter]++;
} else {
$freq[$letter] = 1;
}
}
print_r($freq);