我有一个未知长度的字符串和字符。
我希望能够在x个字符数后截断字符串。
例如来自:
$string = "Hello# m#y name # is Ala#n Colem#n"
$character = "#"
$x = 4
我想回复:
"Hello# m#y name # is Ala#"
希望我在这里不会让事情变得复杂!
非常感谢
答案 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)