如何在特定索引处对字符串中的字符进行样式设置?

时间:2013-08-15 16:34:59

标签: php string highlighting dna-sequence

请您就如何在特定索引处对字符串中的一个字符进行样式设置一些指导?这个字符串的索引来自一个数组,在某些情况下数组是空的,所以如果数组不为空,我只需要在字符串中设置字符样式

$indices = array(74, 266); 

$string  = "CAGGACACTCTTTCTAGTGTTGATTCACCTCGAAGAAGGTCTGGCCTATTAAGAGATCAAGTTCAGTTGGTAAAAAGAAGCAACTCTGCTCGTTATGAGATAGTCCCGATTCAAGATCAACTATCATTTGAGAAGGGTTTCTTTATTGTAATCCGTGCATGCCAGTTGTTGGCTCAGAAGAATGAAGGCATTGTACTGGTGGGAGTCGCTGGTCCTTCAGGGGCCGGAAAGACCATGTTTACAGAAAAGATCCTGAATGTTATGCCTAGTATTGCAATCATAAACATGGACAACTACAATGATCCCAGTCGTATCATTGATGGAAACTTCGACG";

那么如何用索引在索引74和266处添加一个环绕字符,这样我可以给它一个不同的样式?

我的数据来自数据库所以我需要让它变得动态。

由于

1 个答案:

答案 0 :(得分:0)

这很简单:你需要的只是循环中的一些substr并跟踪字符数。

这是我制作的代码:

// zero-based indices
$indices = array(3, 10, 25);

// input
$in = 'abcDefghijKlmnopqrstuvwxyZ';

$openTag = '<b>';
$closeTag = '</b>';

$out = '';
$last = 0;
foreach($indices as $i) {
    $fragment = substr($in, $last, $i-$last);
    $letter = substr($in, $i, 1);
    $last = $i+1;

    $out .= $fragment . $openTag . $letter . $closeTag;
}

$out .= substr($in, $last);

// output
echo $out;

对于此示例,$outabc<b>D</b>efghij<b>K</b>lmnopqrstuvwxy<b>Z</b>


为方便起见,此处还有作为功能

function highlightChars($text, $indices, $openTag, $closeTag) {
    $out = '';
    $last = 0;
    foreach($indices as $i) {
        $fragment = substr($text, $last, $i-$last);
        $letter = substr($text, $i, 1);
        $last = $i+1;

        $out .= $fragment . $openTag . $letter . $closeTag;
    }

    $out .= substr($text, $last);

    return $out;
}