打印不同的字符,并在重复字符数的下一行中打印星号


Print distinct characters and print stars in next rows that number of characters are repeated

我有一个字符串$string = "CONSTANTMAINONE";

我想打印不同的字符,并在下一行打印重复字符数的星形。

C   O   N   S   T   A   M   I   E
*   *   *   *   *   *   *   *   *
    *   *       *   *           
        *                  
        * 

我尝试过的

循环字符将字符添加为键并计数为值然后打印,但输出不是垂直的,问题应该是不要使用tablepre标签

$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. "&nbsp;";
  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
*   *   *   *   *   *   *   *   *
*   *   *   *   *   *   *   *   *
    *   *       *   *       
        *