n番目の文字をマークする良い方法があるかどうか疑問に思っています。現在、私はこのコードを持っていますが、いくつかの欠陥があります。
$string ='Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ac arcu sit amet lorem mollis dignissim ac ut metus. Aliquam sed nulla ut risus sollicitudin luctus vitae eget quam. Nam velit diam, ullamcorper id tempus ac, iaculis sed arcu. Sed sed lectus rhoncus leo vehicula accumsan consequat a risus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin posuere, diam scelerisque suscipit accumsan, enim tortor lobortis sapien, a faucibus sapien metus eu erat. Phasellus condimentum elit ac nisi fringilla imperdiet. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Mauris ac lectus quis lorem ornare ornare non vel nunc. Fusce et odio at leo interdum cursus eget sed magna. Nam convallis vehicula fermentum. Etiam turpis mauris, convallis et sollicitudin quis, rutrum in sapien. Suspendisse purus eros, sagittis vitae venenatis tincidunt, imperdiet molestie sem. Vestibulum eleifend urna vitae tortor suscipit consequat. Praesent placerat magna a ligula fringilla dapibus. Ut volutpat purus eu felis elementum eu laoreet nulla eleifend.';
echo mark_nth_char($string, 100);
function mark_nth_char($string, $pos, $prefixlen=10, $suffixlen=10, $fixchar='...') {
$output = $fixchar;
for ($i = $pos - $prefixlen ; $i < $pos + $suffixlen; $i++ ) {
if ($i == $pos)
$output .= '<b><font color="red">' . $string[$i] . '</font></b>';
else
$output .= $string[$i];
}
return $output . $fixchar;
}
問題点:
- 渡された数値が $prefixlen` 未満の場合、エラーが発生します。
- 渡された数値が文字列の合計長を超えると、エラーが発生します。
- 文字列の合計の長さが と の合計よりも小さい場合は
$prefixlen
、$suffixlen
それらを追加しないでください。
一致する文字 (指定された位置の文字) の周りに文字列を含めたいと考えています。私が気付いていない他の問題があるかもしれませんが、それらの問題を修正するのではなく、より効率的でエレガントな方法で実行できるより良いアプローチがあるかどうか疑問に思っています.
情報ありがとうございます。