1

特定のインデックスで文字列内の 1 文字のスタイルを設定する方法について、いくつかのガイダンスを教えてください。この文字列のインデックスは配列から取得され、場合によっては配列が空であるため、配列が空でない場合にのみ文字列内の文字のスタイルを設定する必要があります

$indices = array(74, 266); 

$string  = "CAGGACACTCTTTCTAGTGTTGATTCACCTCGAAGAAGGTCTGGCCTATTAAGAGATCAAGTTCAGTTGGTAAAAAGAAGCAACTCTGCTCGTTATGAGATAGTCCCGATTCAAGATCAACTATCATTTGAGAAGGGTTTCTTTATTGTAATCCGTGCATGCCAGTTGTTGGCTCAGAAGAATGAAGGCATTGTACTGGTGGGAGTCGCTGGTCCTTCAGGGGCCGGAAAGACCATGTTTACAGAAAAGATCCTGAATGTTATGCCTAGTATTGCAATCATAAACATGGACAACTACAATGATCCCAGTCGTATCATTGATGGAAACTTCGACG";

では、インデックス 74 と 266 の文字をスパンで囲むように追加して、別のスタイルを与えるにはどうすればよいでしょうか?

私のデータはデータベースから来ているので、動的にする必要があります。

ありがとう

4

1 に答える 1

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;

この例では、$outですabc<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;
}
于 2013-08-15T16:48:00.980 に答える