2016-07-22 6 views
0

私は文字列に早く追加される変数を持っていますが、条件が満たされていれば空文字列に置き換える必要がありますコード内でオンになります)。例えば以下のテキストを文字列の末尾に ""と置き換えてください

$indent = str_repeat("\t", $depth); 
$output .= "\n$indent<ul role=\"menu\">\n"; 

私は今、空の文字列とここ$output文字列に付加されます何交換する必要があります。これは他の場所で行われますが、$ indent変数にはまだアクセスできますので、追加された "\ t"がいくつあるか知っています。

だから、私はそうのようpreg_matchpreg_replaceを使用してそれを行うことができます知っている:

if (preg_match("/\n$indent<ul role=\"menu\">\n$/", $output)) 
    $output = preg_replace("/\n$indent<ul role=\"menu\">\n$/", "", $output); 
else 
    $output .= "$indent</ul>\n"; 

しかし、私はここにパフォーマンスに疑問に思って、そしてこれを行うには良い方法があるかどうか?誰かが私の正確な$outputで改行とタブ文字を使用している例を提供できるなら、それは素晴らしいだろう。

答えて

1

$outputの最後から削除する場合は、正規表現を使用すると、文字列全体をスキャンして正規表現ルールを解析するため、実際には効率的ではありません。

クロッピングするテキストを$suffixと呼びます。私はどうなる:

//find length of whole output and of just the suffix 
$suffix_len = strlen($suffix); 
$output_len = strlen($output); 

//Look at the substring at the end of ouput; compare it to suffix 
if(substr($output,$output_len-$suffix_len) === $suffix){ 
    $output = substr($output,0,$output_len-$suffix_len); //crop 
} 

Live demo

+0

'/ N '、'/T'、および/または '/ r'を使用しているときは良いと全て見えますが、どのように' strlen'出力が行われること? –

+1

どちらの方法でも動作します。 'strlen( '\ n \ n')'は4です。 – BeetleJuice

+0

ありがとう、素晴らしい作品! –

関連する問題