長さと文字が不明な文字列があります。
x文字数の後に文字列を切り捨てられるようにしたいと思います。
たとえば、次のようになります。
$string = "Hello# m#y name # is Ala#n Colem#n"
$character = "#"
$x = 4
戻りたい:
"Hello# m#y name # is Ala#"
ここで物事を複雑にしすぎていないことを願っています!
どうもありがとう
explode
で文字列を -ing し#
、その配列の最初の 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).'#';
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
)、探している区切り文字の後に停止します。最初にテキストがなくなると ( return )、空の文字列がstrpos
返されます。false
更新: これは、このメソッドを爆発と比較する私が作成したベンチマークです: http://codepad.org/rxTt79PC。(の代わりにexplode
使用すると)の方が速いようです。array_pop
array_slice
これらの行に沿ったもの:
$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)