Php 截断x个字符后的字符串

Php 截断x个字符后的字符串,php,string,Php,String,我有一个长度和字符未知的字符串 我希望能够在x个字符之后截断字符串 例如: $string = "Hello# m#y name # is Ala#n Colem#n" $character = "#" $x = 4 我想返回: "Hello# m#y name # is Ala#" 希望我没有把事情搞得太复杂 非常感谢函数posncut($input,$delim,$x){ function posncut( $input, $delim, $x ) { $p = 0; f

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

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

例如:

$string = "Hello# m#y name # is Ala#n Colem#n"
$character = "#"
$x = 4
我想返回:

"Hello# m#y name # is Ala#"
希望我没有把事情搞得太复杂

非常感谢

函数posncut($input,$delim,$x){
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 );
$p=0; 对于($i=0;$i<$x;++$i){ $p=STRPO($input,$delim,$p); 如果($p==false){ 返回“”; } ++$p; } 返回substr($input,0,$p); } echo posncut($string,$character,$x);
它依次查找每个分隔符(
strpos
),并在您要查找的分隔符之后停止。如果它首先用完了文本(
strpos
返回
false
),它将给出一个空字符串


更新:下面是我制作的一个基准测试,它将此方法与explode:进行了比较。似乎
分解
(与
数组_pop
而不是
数组_slice
一起使用时)更快。

我建议
分解
-在
上分解字符串,然后获取该数组中的前四个元素

$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).'#';

大致如下:

$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)
$str_length=strlen($string)
$character=“#”
$target_count=4
$count=0;

对于($i=0;$i)你的意思是,在问题中的示例中,直到第四次出现“#”为止的所有内容都是正确的,我认为一定有一个php函数,这意味着我不必循环使用
strtok
&构建一个新字符串似乎最有效。当然,你可以使用
$arr=explode($character,$string,$x+1)$newstring=内爆(“#”,array_slice($arr,0,4))
route。你为什么讨厌循环?不是“我的”-感谢benchmark+1提供了它(应该在你的答案中引用它)。很难根据外观判断代码,而且经常出错=)添加了它,并清理了上面的注释线程,因为我好像在自言自语:P