在div中包装文本行,具体取决于第一个符号

时间:2013-10-17 12:30:57

标签: php

好的,我有一些看起来像这样的.txt文件。

+ Some text
~ Some text
    ~ more text
    ~ more text
    - more text
- and some text here

我想在新div中包装每一行,但如果行以+开头添加类'add',则 - 添加类'删除',并为〜添加类'edit';

我目前的代码是

$lines = explode("\n", $text);
$out = '';
foreach ($lines as $line) {
    if (!empty($line)) {
        if ($line[0] == "+") {
            $out .= "<div class='add'>$line</div>";
        }
        elseif ($line[0] == "-") {
            $out .= "<div class='removed'>$line</div>";
        }
        elseif ($line[0] == "~") {
            $out .= "<div class='edit'>$line</div>";
        }
        elseif ($line[0] == "\t") {
            if ($line[1] == "+") {
                $out .= "<div class='add'>$line</div>";
            }
            elseif ($line[1] == "-") {
                $out .= "<div class='removed'>$line</div>";
            }
            elseif ($line[1] == "~") {
                $out .= "<div class='edit'>$line</div>";
            }
        }
    }
}

这可以胜任,但我想要一个更优雅的解决方案,任何想法?

2 个答案:

答案 0 :(得分:3)

你可以使用这样的数组:

$cssClass = array('+' => 'add', '-' => 'remove', '~' => 'edit'); 

然后

$out .= "<div class='".$cssClass[$line[0]]."'>$line</div>";

没有if或switch。

答案 1 :(得分:1)

您可以尝试switch

  $line = ($line[0] == "\t") ? $line[1] : $line[0];
  switch($line){ 
     case '+' : $class="add" ; break;
     case '~' : $class="edit" ; break;
     case '-' : $class="removed"; break;
     default  : $class="";
    }
 $out .= "<div class='$class'>$line</div>";