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

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).'#';
于 2013-03-06T17:43:18.913 に答える
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)、探している区切り文字の後に停止します。最初にテキストがなくなると ( return )、空の文字列がstrpos返されます。false

更新: これは、このメソッドを爆発と比較する私が作成したベンチマークです: http://codepad.org/rxTt79PC。(の代わりにexplode使用すると)の方が速いようです。array_poparray_slice

于 2013-03-06T17:42:33.583 に答える
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 に答える