2
join_strings(string $glue, string $var, string $var2 [, string $...]);

上で概念化した機能と同じように動作するものを探しています。機能的な例は次のとおりです。

$title = "Mr.";
$fname = "Jonathan";
$lname = "Sampson";

print join_strings(" ", $title, $fname, $lname); // Mr. Jonathan Sampson

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

これを実現するための方法はすでに存在しますか、それとも最初から作成する必要がありますか?

:私は連結(。)と建物連結(。=)に精通しています。私はそれをしたくありません(それは関数内で行われます)。私の意図は、$glue変数を1回だけ書き込むことです。各連結で数回ではありません。

4

6 に答える 6

21

結合または内破を使用できます。どちらも同じことを行い、あなたが言うように、それは難しくない配列である必要があります

join($glue, array($va1, $var2, $var3));
于 2009-07-19T21:31:36.773 に答える
8

を使用func_get_args()して、implode()(またはそのエイリアスjoin()) を自分の意志に曲げることができます。

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

func_get_args()ただし、メモのドキュメントとして:

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

そのため、引数から配列を作成してそれを渡すことになりますが、PHP にそれを任せることができます。

implode()単純に直接使用しないことを正当化するために、質問のものよりも説得力のある例はありますか?

今やっている唯一のことはarray()、変数を入力する手間を省くことですが、実際に_stringsは、関数名に追加したものよりも短くなります。

于 2009-07-19T21:58:47.467 に答える
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;
}

編集:コメントの提案により機能が改善されました

于 2009-07-19T21:52:17.230 に答える
2
$a="hi";
$b = " world";
echo $a.$b;
于 2009-07-19T21:30:53.593 に答える
0

私は受け入れられた答えに同意しますが、内破は結合よりも速いと述べているこの記事を参照してください。

于 2009-07-20T08:58:36.433 に答える
-1

ドット「.」を使用する必要があります。オペレーター。これは、抽象代数理論、連結演算子に関して文字列がモノイドであること、および代数構造を扱う場合、ドットは通常一般的な演算子として使用されるという事実に由来します (もう 1 つは "+" です。他の言語で使用されます)。

簡単に説明すると、モノイドであることは操作の結合性を意味し、恒等要素 (この場合は空の文字列) が存在することを意味します。

于 2009-07-19T21:38:54.217 に答える