2009-12-04 22 views
6

長い間Javaを使用してきたので、長い文字列を1つずつ作成する私の標準的な方法は、要素を配列に追加して配列を壊すことでした。文字列連結とPHPの配列implodeとの比較

$out[] = 'a'; 
$out[] = 'b'; 
echo implode('', $out); 

ただし、多くのデータがあります。

(標準PHP)の代わりに、文字列連結を使用することができます。

$out = 'a'; 
$out .= 'b'; 
echo $out; 

私の驚いたことに、両方の方法には速度の差はないようです。重要な時間差が通常ある場合、それはより速く見える連結ですが、すべての時間ではありません。

私の質問です。スタイルとコードの可読性は別として、他の方法よりも1つのアプローチを選択する理由はありますか?

+1

PHPはJavaではありません。だから彼らが違うことに驚かないでください。 – Gumbo

+0

PHPでは、文字列は不変でもオブジェクトでもありません。 – Powerlord

答えて

8

私にとっては、配列を使用すると、簡単な文字列連結ではできないことを実行することになります。並べ替え、一意性のチェックなど。そういうことをやっていないのであれば、コードを知らない人が1年か2年で文字列連結を読みやすくなります。彼らは、配列が爆縮される前に操作されるかどうか疑問に思う必要はありません。

言い換えれば、単語間にカンマまたは「と」の文字列を作成する必要があるとき、私は暗黙の配列のアプローチをとっています。後者はa,b,を印刷する場所最初のものはa,bを印刷する

<?php 
$out[] = 'a'; 
$out[] = 'b'; 
echo implode(',', $out); 

foreach($out as $o) { 
    echo $o . ','; 
} 

?> 

:文字区切り文字列を生成する際

3

読みやすいものを選択してください。常に。この場合、私は第2のapporachを拾うだろう。 ボトルネックの場合は、最適化してください。

+0

いいえ、ボトルネックではなく、好奇心が強いだけです。とにかく私はすでに可読性について述べました。 – Matijs

+1

私はこれに同意するしかありません。マイクロベンチマークでは0.0001%速いことがわかって以来何もしません。 XDebugやzendDebuggerにはPHPのためのプロファイラーがあります。十分でない場合は、PHPランタイムのプロファイリング方法もあります。 "optmized"コードのメンテナンスよりも時間がかかります。開発者に支払う) – johannes

+0

+1最も適切なものを選んでください。 'implode'が問題をエレガントに解決するなら、それを使用してください。 –

3

ワン(微妙)の差がはっきりと見えます。したがって、あなたがあなたの例で行ったように、空の文字列をセパレータとして使用していない限り、普通はimplode()を使用することが好まれます。

+0

することができます: $ first = true; foreach($ out as $ o){ if($ first) $ first = false; else echo '、'; echo $ o; } これは、代わりにa、bを与えるはずです。 –

+1

@Raney:なぜ 'implode()'の方が簡単なの? – Lukman

2

連結 - 対兵器戦争の脇に:いいえ、違いはありません。

あなたは、配列を開始し、特定の要素を/それを並べ替える操作する必要がある場合

それはあなたが文字列/配列で何をしたいかによって異なり
0

、あなたはそれを作成する方法は、その後、私は内破示唆

それ以外の私は通常連結を使用します