在x个字符数后截断字符串

时间:2013-03-06 17:37:51

标签: php string

我有一个未知长度的字符串和字符。

我希望能够在x个字符数后截断字符串。

例如来自:

$string = "Hello# m#y name # is Ala#n Colem#n"
$character = "#"
$x = 4

我想回复:

"Hello# m#y name # is Ala#"

希望我在这里不会让事情变得复杂!

非常感谢

3 个答案:

答案 0 :(得分:4)

function posncut( $input, $delim, $x ) {
    $p = 0;
    for( $i = 0; $i < $x; ++ $i ) {
        $p = strpos( $input, $delim, $p );
        if( $p === false ) {
            return "";
        }
        ++ $p;
    }
    return substr( $input, 0, $p );
}
echo posncut( $string, $character, $x );

它依次找到每个分隔符(strpos)并在您要查找的分隔符后停止。如果它首先用完文本(strpos返回false),则会给出一个空字符串。

更新:这是我制作的一个基准,它将此方法与爆炸比较:http://codepad.org/rxTt79PC。似乎explode(与array_pop一起使用而不是array_slice)更快。

答案 1 :(得分:4)

我建议explode使用#上的字符串,然后获取该数组中的前4个元素。

$string = "Hello# m#y name # is Ala#n Colem#n";
$character = "#";
$x = 4;

$split = explode($character, $string);
$split = array_slice($split, 0, $x);

$newString = implode($character, $split).'#';

答案 2 :(得分:1)

这些方面的东西:

$str_length =  strlen($string)
$character = "#"
$target_count = 4

$count = 0;
for ($i = 0 ; $i<$str_length ; $i++){
    if ($string[$i] == $character) {
        $count++
        if($count == $target_count) break;
    }

}

$result = sub_str($string,0,$i)