我有一个代码,用于计算字符串中字母表的频率。 。我的代码是:
<?php
$str = "iamtheone";
$freq_count = array();
for ($i = 0; $i < strlen($str); $i++) {
$index = $str[$i];
$freq_count[$index]++;
foreach (range('a', 'z') as $char) {
//echo "<pre>".$key . " " . $char."</pre>";
$index = $char;
if (isset($freq_count[$index])) {
} else {
$freq_count[$index] = "0";
}
}
}
echo "<pre>";
print_r($freq_count);
echo "</pre>";
?>
输出结果为:
Array
(
[i] => 1
[a] => 1
[b] => 0
[c] => 0
[d] => 0
[e] => 2
[f] => 0
[g] => 0
[h] => 1
[j] => 0
[k] => 0
[l] => 0
[m] => 1
[n] => 1
[o] => 1
[p] => 0
[q] => 0
[r] => 0
[s] => 0
[t] => 1
[u] => 0
[v] => 0
[w] => 0
[x] => 0
[y] => 0
[z] => 0
)
现在我希望他们以下列格式转换数组:
*
* * * * * * * *
a b c d e f g h i j k l m n o p q r s t u v w x y z
说明:星号的数量取决于每个字母的频率。例如,a
在字符串中只重复一次,e
在字符串中重复两次,依此类推。
我的数组格式是否正确?有什么建议吗?谢谢
答案 0 :(得分:0)
这是我对它的看法,只需为每个发现的字符添加一个星号,不需要将出现的次数计算为数字 - 也可以使用strtolower()来转换大写字母并计算它们:
$freqCount = array();
$countedStr = 'iamtheone';
// inits the frequency count array
foreach (range('a','z') as $char) {
$freqCount[$char] = '';
}
for($i=0; $i<strlen($str); $i++) {
$index = $countedStr[$i];
// potentially convert to lower case:
// $index = strtolower($countedStr[$i]);
$freqCount[$index] .= '*'; // adds an asterisk to the letter
}
答案 1 :(得分:0)
你的老师不相信你在没有帮助的情况下做到了这一点,但是:
$str ="iamtheone";
// Calculate the frequency table for all letters
$letters = array_fill_keys(range('a', 'z'), ' ');
$freq_count = array_merge(
$letters,
array_count_values(str_split(strtolower($str)))
);
// Plot the display chart
for ($line = max($freq_count); $line > 0; --$line) {
echo implode(
' ',
array_map(
function ($value) use ($line) {
return ($value >= $line) ? '*' : ' ';
},
$freq_count
)
);
echo PHP_EOL;
}
echo implode(' ', array_keys($lineArray)), PHP_EOL;