我遇到这种情况:
$asd = "Hey hello world!";
现在我想知道如何递归(如果不存在)递归(每3个字符)一个字符(例如:“J”)...从左到右解析字符串?
结果将是:
$asd = "HeyJ heJlloJ woJrldJ!";
答案 0 :(得分:1)
你可以这样做:
if(substr($asd, 3, 1) !== 'J')
{
$asd = substr($asd, 0, 3)."J".substr($asd, 3);
}
除非您知道字符串$ asd超过三个字符,否则您还应检查字符串的长度:
if(strlen($asd) > 3 && substr($asd, 3, 1) !== 'J')
{
$asd = substr($asd, 0, 3)."J".substr($asd, 3);
}
最后,上面的方法适用于单个字符和多个字符序列,但如果你只关心1个字符,你可以使用字符串索引来检查字符是否存在,如下所示:
if(strlen($asd) > 3 && $asd[3] !== 'J')
{
$asd = substr($asd, 0, 3)."J".substr($asd, 3);
}
如果你需要每隔3个字符就把它放在一个循环中:
$pos = 0;
while(true)
{
// go to the position of the next character of interest
$pos += 3;
// if the next pos is past the end of the string break out of the loop
if(strlen($asd) <= $pos)
break;
if($asd[$pos] !== 'J')
{
$asd = substr($asd, 0, $pos)."J".substr($asd, $pos);
$pos++;
}
}
注意强>
如果你用这种方式编辑的字符串很大并且需要修改的出现次数也很大,你可以优化算法,使它首先找到需要插入字符的位置,然后拆分原始字符。将字符串转换为子字符串数组,然后使用控制字符作为加入者使用array_join
答案 1 :(得分:1)
怎么样:
$str = "Hey hello world!";
for($i=3; $i<strlen($str); $i+=4) {
if ($str[$i] != 'J')
$str = substr_replace($str, 'J', $i, 0);
}
echo $str,"\n";
<强>输出:强>
HeyJ heJlloJ woJrldJ!