我有一个长度和字符未知的字符串。
我希望能够在 x 个字符后截断字符串。
例如来自:
$string = "Hello# m#y name # is Ala#n Colem#n"
$character = "#"
$x = 4
我想返回:
"Hello# m#y name # is Ala#"
希望我不会在这里把事情复杂化!
非常感谢
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
)更快。
我建议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).'#';
这些方面的东西:
$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)