在PHP中替换每3个字符出现的字符串

3
有没有一个 PHP 函数可以在字符出现 X 次时进行替换?
例如:
$string="a,b,c,d,e,f,g,h,i,j,k,l";

每3个逗号将追加"\n\r"。
a,b,c,
d,e,f,
g,h,i,
j,k,l

我已经写过这个了。

function addBreaks($string,$char,$count) {  
    $ii = 0;
    for ( $i = 0; $i < strlen($string); $i++){  
        if ($string[$i] == $char){
            $ii++;      
            }
        if ($ii == $char){      
            $ii = 0;

            }
        $string = $string[$i]+"\n\r"+$string[$i+1]; 
        }
        return $string;
    }

你尝试过什么了吗? - elune
尝试自己写一些代码,如果不行的话,向我们展示你具体做了什么,这样我们就可以帮助你。你开始写,我们来帮忙。我们不会替你写代码。请向我们展示你实际尝试过的代码,然后我们可以从那里开始帮助你。如果你先自己尝试一下,很有可能你会接近答案。 - Andy Lester
一个用于分割字符串的函数?你试过在谷歌上搜索“PHP分割字符串”吗? - user229044
可以用很多种方法来实现。可以简单地循环并分割它,或者使用 preg_replace 来完成任务。 - Lionel Chan
2
请不要降低我的声誉.. 我已经尝试了,我所问的是PHP中是否有内置函数。 - user1761160
你可以尝试使用 preg_split,但我不确定在这种情况下它会有多大用处。 - Phil
3个回答

2
你可以使用chunk_split()函数:
echo chunk_split($string, 6, '<br />'); //6 because after every third comma so count characters

这似乎与任意数量的字母有关。
$string = "a,b,c,d,easda,f,g,hasd,i,j,k,l";

function split_me($str, $delim, $pos) {
    return implode($delim."<br />", array_map(function($arr) use ($delim) {
          return implode($delim, $arr);
    }, array_chunk(explode($delim, $str), $pos)));
}
echo split_me($string,",", 3);

请记住,如果逗号之间的字母数量不固定,例如:a,bcd,efghijk,则此方法将无法正常工作 - 但我喜欢这种方法。 - Sean Johnson

2
无论逗号之间有多少字母(它会在找到每个$count逗号后添加换行符)都可以正常工作。
function addLineBreaks($string,$char,$count) {
    return preg_replace("/(?:[^$char]+$char){{$count}}/","\\0<br />",$string);
}

示例用法:

echo addLineBreaks("a,b,c,d,e,f,g,h,i,j,k,l",",",3);

不错,我希望我也能做出这样的正则表达式.. 它们就是进不了我的脑子.. :) - Sudhir Bastakoti

0

可能有像这样的解决方案(非常粗略):

function addLineBreaks( $str, $n = ',', $x = 3 ) {
    $sArr = str_split( $str );
    $output = '';
    $occ = 0;
    foreach( $sArr as $k=>$v ) {
        $output .= $v;          
        if( $v == $n ) {
            $occ++;
            if( $occ%$x == 0 ) $output .= "\r\n";           
        }
    }

    return $output;
}

使用方法如下:

header("Content-Type:text/plain");
echo addLineBreaks( "a,b,c,d,e,f,g,h,i,j,k,l" );
// outputs:
//a,b,c,
//d,e,f,
//g,h,i,
//j,k,l

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接