我有一个字符串:
$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,帮助
答案 0 :(得分:0)
将标签添加到某个位置很简单:
$str = substr($str, 0, $x) . sprintf('<tag>%s</tag>', $str[$x]) . substr($str, $x+1);
答案 1 :(得分:0)
这可能不会很快,但它非常直接:
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
和匿名函数进一步“喜欢”该过程。