如何在String的给定位置突出显示/添加标记到char

时间:2013-08-23 08:30:26

标签: php html

我有一个字符串:

$str="55798-45366-11255-48084-35644-28027-85391-45536-85002-55350-4166-5991-0313-3681-9382-9143-2852-8142-8643-0235-875-383-839-92-91-00-81";

我希望在上面字符串中任意位置x和y处的字符前后添加标记(如:<font color=red> </font>),但不包含“-”分裂字符,如:

$str2="55798453661125548084356442802785391455368500255350416659910313368193829143285281428643023587538383992910081";

在x = 5&amp;位置添加标签Y = 8:

55798<font color=red>4</font>53<font color=red>6</font>61125548084356442802785391455368500255350416659910313368193829143285281428643023587538383992910081

$str="55798-<font color=red>4</font>53<font color=red>6</font>6-11255-48084-35644-28027-85391-45536-85002-55350-4166-5991-0313-3681-9382-9143-2852-8142-8643-0235-875-383-839-92-91-00-81";

然后按照explode("-", $str);或者数组的方式将str转换为数组。

我用substr_replace($str2,"<font color=red>$str2[$x]</font>",$x,1);尝试了很多但是失败了。我不知道如何,PLZ,帮助

2 个答案:

答案 0 :(得分:0)

将标签添加到某个位置很简单:

$str = substr($str, 0, $x) . sprintf('<tag>%s</tag>', $str[$x]) . substr($str, $x+1);

答案 1 :(得分:0)

这可能不会很快,但它非常直接:

Live demo

function tag($str,$pos1,$pos2)
{
    $offset=-1;
    $arrs=explode("-",$str);
    list($pos1,$pos2)=array(min($pos1,$pos2),max($pos1,$pos2));
    foreach($arrs as &$chunk)
    {
        $len=strlen($chunk);
        if($offset+1>$pos2) break;
        if($offset+1<=$pos2 && $offset+$len>=$pos2)
        {
            $chunk=substr($chunk,0,$pos2-$offset-1)."<span style='color:red'>".substr($chunk,$pos2-$offset-1,1)."</span>".substr($chunk,$pos2-$offset);
        }
        if($offset+1<=$pos1 && $offset+$len>=$pos1)
        {
            $chunk=substr($chunk,0,$pos1-$offset-1)."<span style='color:red'>".substr($chunk,$pos1-$offset-1,1)."</span>".substr($chunk,$pos1-$offset);
        }
        $offset+=$len;
    }
    return $arrs;
}

我们的想法是首先爆炸字符串,并使用偏移记忆来“模拟”substr搜索。

您可能希望反向迭代该过程,因为代码必须先检查更高的位置(否则第二个substr的位置将不正确)。

您还可以使用array_walk和匿名函数进一步“喜欢”该过程。