0

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

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

我想将每一行包装在新的 div 中,但是如果行以 + 开头添加类“添加”,对于 - 添加类“删除”,对于〜添加类“编辑”;

我目前的代码是

$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>";
            }
        }
    }
}

这可以完成工作,但我想要一个更优雅的解决方案,有什么想法吗?

4

2 回答 2

3

您可以像这样使用数组:

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

进而

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

没有 if 或 switch。

于 2013-10-17T12:40:27.157 回答
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>";
于 2013-10-17T12:37:28.637 回答