我有一个字符串$string = "CONSTANTMAINONE";
我想打印不同的字符,并在下一行打印重复字符数的星形。
C O N S T A M I E
* * * * * * * * *
* * * *
*
*
我尝试过的
循环字符将字符添加为键并计数为值然后打印,但输出不是垂直的,问题应该是不要使用
table
或pre
标签
$string = "CONSTANTMAINONE";
$repeated_char = [];
for($i=0; $i<=strlen($string);$i++){
if(!array_key_exists($string[$i], $repeated_char)){
$repeated_char[$string[$i]] = 1;
}else{
$repeated_char[$string[$i]] += 1;
}
}
到目前为止,输出为
C => 1
o => 1
N => 4
s => 1
T => 1
..etc..,
然后,打印字符
foreach($repeated_char as $key=>$val){
echo $key. " ";
for($j=0; $j<$val; $j++){
echo "*";
}
echo "<br/>";
}
所以,我的代码的最终输出
C *
o **
N ****
S *
T **
A **
M *
I *
E *
这个答案来自第一次修订:
https://stackoverflow.com/revisions/28536477/1
这应该对你有用:
(在这里,我使用str_split()
从字符串中创建一个数组。之后,我用array_count_values()
计算所有数组值。然后,这只是一个简单的打印操作。首先,我打印所有唯一的值,然后,我打印tmp数组中的开始和递减值)
<?php
$string = "CONSTANTMAINONE";
$array = str_split($string);
$count = array_count_values($array);
$tmp = $count;
echo "<table border='1'><tr>";
foreach($count as $k => $v)
echo "<td>" . $k . "</td>";
echo "</tr>";
for($i = 0; $i < max($count); $i++) {
echo "<tr>";
foreach($tmp as $k => $v) {
if($v >= 1)
echo "<td>*</td>";
else
echo "<td></td>";
$tmp[$k]--;
}
echo "</tr>";
}
echo "</table>";
?>
输出:
C O N S T A M I E
* * * * * * * * *
* * * * * * * * *
* * * *
*