【问题标题】:every letter different color in string, HTML PHP字符串中每个字母不同的颜色,HTML PHP
【发布时间】:2017-11-07 17:17:02
【问题描述】:

我需要仅使用 HTML 和 PHP 以不同颜色(不是随机颜色)打印字符串的每个字符。它几乎可以工作,但数组的第一个字母是黑色的。你知道为什么吗?

<html>
    <?php
        $myString = ["s","t","r","i","n","g"];
        $myColors = ["blue","green","yellow","brown","gray","pink"];

        for ($i = 0; $i < count($myString); $i++) { 
            echo "$myString[$i] <span style='color:$myColors[$i]'</span>";
        }
    ?>
</html>

【问题讨论】:

  • 查看你的标记,哪些字母在哪些跨度内......加上你没有结束&gt;的事实

标签: php html arrays for-loop


【解决方案1】:

好像你没有正确关闭你的跨度标签,将你的字符串放在你的跨度内将有助于着色。

<?php
$myString = ["s","t","r","i","n","g"];
$myColors = ["blue","green","yellow","brown","gray","pink"];

for ($i = 0; $i < count($myString); $i++) { 
   echo "<span style='color:$myColors[$i]'>$myString[$i]</span>";
}

【讨论】:

    【解决方案2】:

    此函数将获取短语和颜色列表,并按照指定的顺序为列表中的每个字符着色。它还将跳过标点符号和空格,以保持在 ASCII 表中 '0' 和 'z' 之间有意义的可打印字符内。

    function ColoredPhrase(string $Phrase, string $ColorList){
        $ColorList = explode(",", str_replace(" ", null, $ColorList));
        $ColorCount = count($ColorList);
        $ColorIndex = -1;
    
        for($CharacterIndex = 0; $CharacterIndex < strlen($Phrase); $CharacterIndex++){
            $Character = $Phrase[$CharacterIndex];
    
            if($Character >= "0" && $Character <= "z"){
                $ColorIndex = $ColorIndex < ($ColorCount - 1) ? $ColorIndex + 1 : 0;
                $HTML[] = "<span style=\"color: {$ColorList[$ColorIndex]};\">{$Character}</span>";
            }else{
                $HTML[] = $Character;
            }
        }
    
        return implode($HTML);
    }
    
    var_dump(ColoredPhrase("Hello, World!", "Violet, Blue, Sky, Green, Yellow, Orange, Red"));
    

    该示例将采用包含多个字符的 Phrase,并通过彩虹色表对它们进行着色,这意味着该函数将通过 PHP 生成等效的 HTML。

    【讨论】:

      【解决方案3】:

      字符不在彩色范围内,您缺少&gt;

      echo "<span style='color:$myColors[$i]'>$myString[$i]</span>";
      

      【讨论】:

        【解决方案4】:

        我认为您的 HTML 已损坏。您需要在 &lt;span&gt; 元素中包含 $myString[$i] 并正确关闭它。

        $myString = ["s","t","r","i","n","g"];
        $myColors = ["blue","green","yellow","brown","gray","pink"];
        
        for ($i = 0; $i < count($myString); $i++) { 
           echo "<span style='color:$myColors[$i]'>$myString[$i]</span>";
        }
        

        【讨论】:

          【解决方案5】:
          <html>
          <?php
          $myString = ["s","t","r","i","n","g"];
          $myColors = ["blue","green","yellow","brown","gray","pink"];
          
          for ($i = 0; $i < count($myString); $i++) { 
          
             echo "<span style='color:$myColors[$i]'> $myString[$i] </span>";
          
          }
          ?>
          </html>
          

          【讨论】:

            【解决方案6】:

            您可以通过使用模数运算符计算目标索引来循环浏览您的颜色数组(一遍又一遍)。您可以使用简单的正则表达式模式来定位字符串中的可见字符。

            当文本与操作或多个变量连接时,我更喜欢使用printf()/sprintf()

            代码:(Demo)

            $palette = ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet'];
            $count = count($palette);
            echo preg_replace_callback(
                    '~\PZ~u',
                    function($m) use($palette, $count) {
                        static $i = 0;
                        return sprintf('<span style="color:%s">%s</span>', $palette[$i++ % $count], $m[0]);
                    },
                    'Stack Overflow volunteerism'
                 );
            

            您会注意到字母被包裹在具有指定颜色的 span 标记中。空格没有包含在标签中,因为那将是不必要的标记膨胀。 \PZ 是一种表示任何非空白字符的 unicode/多字节安全方式。

            以下是相同技术的细微变化:

            echo preg_replace_callback(
                    '~\PZ~u',
                    function($m) {
                        static $i = -1;
                        static $palette = ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet'];
                        return sprintf(
                                   '<span style="color:%s">%s</span>',
                                   $palette[++$i] ?? $palette[$i = 0],
                                   $m[0]
                               );
                    },
                    'Stack Overflow volunteerism'
                 );
            

            【讨论】:

            • @Mark 请查看此答案,看看投票中和是否合理。 (我得到了一点报复投票)我不会为我的问题辩护免受攻击,但正确的答案不应该有否定的结果。
            猜你喜欢
            • 2011-09-12
            • 1970-01-01
            • 2012-07-30
            • 2011-08-30
            • 2015-12-22
            • 1970-01-01
            • 1970-01-01
            • 2020-10-23
            • 1970-01-01
            相关资源
            最近更新 更多