0

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

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

例如来自:

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

我想返回:

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

希望我不会在这里把事情复杂化!

非常感谢

4

3 回答 3

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)更快。

于 2013-03-06T17:42:33.583 回答
4

我建议explode-ing 字符串 on #,然后获取该数组中的第一个 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).'#';
于 2013-03-06T17:43:18.913 回答
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)
于 2013-03-06T17:44:25.177 回答