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

时间:2013-09-30 03:54:01

标签: php

当角色出现x时间时,是否有能够替换的php函数?

例如

$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;
    }

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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);

答案 2 :(得分: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
相关问题