2009-07-19 7 views
2
join_strings(string $glue, string $var, string $var2 [, string $...]); 

私は、上記で概念化した機能と同様の動作をするものを探しています。機能的な例は次のようになります。文字列を結合するPHP関数?

ドキュメントをすばやく確認した後、私はこれを行うことは何も見ませんでした。私が考えることのできる最も近いものは、配列で動作するimplode()です。そのため、最初に配列に文字列を追加してからimplodeする必要があります。

これを達成するための方法は既にありますか、またはゼロから作成する必要がありますか?

注::私は連結(。)と建物連結(。=)に精通しています。私はそれをしたくない(それは機能内で起こるだろう)。私の意図は$ glue変数を1回だけ書くことです。各連結で数回ではありません。

答えて

20

あなたはそれがあなたが「ドットを使用する必要があります

join($glue, array($va1, $var2, $var3)); 
+0

これは私がそれを個人的にやり遂げる方法です。 – hbw

+0

私はこれについて考えていましたが、配列を作成して文字列を追加するのではなく、すぐに文字列を追加できるオプションがあるかどうか疑問に思っていました。 – Sampson

+0

私はそれが私が探している答えではないにしてもupvotingです。これは間違いなくクリーンでエレガントな高速ソリューションです。それは私の転倒かもしれない。 – Sampson

2
$a="hi"; 
$b = " world"; 
echo $a.$b; 
+0

私は連結に精通しています。 $接着剤を何度も何度も繰り返す必要はないので、私は機能を探しているのです。 – Sampson

+0

foreach文では、それほど難しくありません。 – luiscubal

+0

foreachは、私の質問は、私が最初に避けたいと言った配列を意味するでしょう:) – Sampson

-1

難しいことではない配列にする必要が言うように、両方が同じこと を行うと、参加または内破使用することができます。 "オペレーター。 これは、抽象代数理論、文字列が連結演算子に関してモノイドであること、および代数構造を扱うときには通常ドットが一般的な演算子として使用されることに由来します(もう1つは "+"他の言語で使用されています)。

簡単に言えば、モノイドであるということは操作の結合性を意味し、識別要素(この場合は空の文字列)が存在することを意味します。

+4

彼は連結演算子を直接使用したくありません。彼は、文字列を結合する機能がすでに存在しているかどうかを尋ねていました。何度も手動で連結コードを繰り返しコード化する努力を省いています。 – Etzeitet

3

このお試しください:

function join_strings($glue, $arg){ 
    $args = func_get_args(); 
    $result = ""; 
    $argcount = count($args) 
    for($i = 1; $i < $argcount; $i++){ 
     $result .= $args[$i]; 
     if($i+1!=count($args){ 
      $result .= $glue; 
     } 
    } 
    return $result; 
} 

EDIT:あなたはimplode()(またはそのエイリアスjoin())を作るためにfunc_get_args()を使用することができます提案

+0

ほんの数分前に同様の機能を書きました。同じ結論に達するためのプラス1。私は受け入れられたソリューションをjoin()を使って代わりに使うつもりですが、それはもっと間違っているからです。あなたの関与をありがとう。 – Sampson

+0

"count($ args)"を関数の先頭で1回だけ使用し、すべての繰り返しでは使用しない方が効率的です。 –

8

をコメントする改善された機能のおかげで、あなたの意志に曲がる:

function join_strings($glue) { 
    $args = func_get_args(); 
    array_shift($args); 
    return implode($glue, $args); 
} 

func_get_args()の注釈として:

各要素が現在のユーザー定義関数の引数リストの対応するメンバーのコピーである配列を返します。

あなたはまだ引数から配列を作成し、それを渡すことになります。ただし、PHPがあなたに代わって処理することを除けば

implode()を直接使用するだけではなく、あなたの疑問にお答えした例がありますか?

変数の周りにarray()と入力するのは手間が省けますが、それは実際には関数名に追加した_stringsよりも短くなります。

+0

+1は優れた貢献をしており、この場合アレイの回避は不可能であることを指摘しています。 – Sampson

0

私は受け入れられた答えに同意しますが、このarticleを参照してくださいthats implodeはjoinよりも速いと言います。

+0

ありがとう、David。私はそれについて+1します:) – Sampson

+0

PHPマニュアルによると、 'join'は' implode() 'のエイリアスです.http://hu.php.net/joinを参照してください。 –

関連する問題