PHPの文字列の先頭に追加するための。=と同等のものはありますか?


103

文字列の先頭にテキストを追加するための。=のようなものがあるかどうか疑問に思っています。例:

$foo =. 'bar';

これは機能しません。

編集:例はもともと$foo =. $bar;で達成することができました$bar .= $foo;


私はジェームズを誓います」彼はそれに対する答えを書いておくべきだった...
クリスチャン

6
付け加えること$foo$bar、代わりに前置するの$bar$foo。結果は似ていますが、彼は変異させたいと思います$foo
エリックV

ほんの少しこっそりとコメントするように意図されていました(そのため、コメントではなく回答です)。
James Allardice、2011

1
うーん...申し訳ありませんが、悪い例...今修正されました:)
yuttadhammo '18

回答:



4

あなたはいつでもそのための独自の関数を作ることができます:

function prepend($string, $chunk) {
     if(!empty($chunk) && isset($chunk)) {
        return $string.$chunk;
     }
     else {
        return $string;
     }
}

$stringあなたが先頭に追加したいとすることを作品になり$chunkますが、その上に先頭に追加何かをしたいというテキストになります。

チェックはオプションであると言えますが、チェックをそこに置くことで、誤ってnull値を渡すことを心配する必要はありません。


1
ありがとう、あなたは正しい。それは簡単または高速に建てられた何かのように間違いはありませんコピー&ペーストすること自由に感じているが、それは簡単にする場合に役立ちます:D。
アーロン

7
何かが!empty常にある場合はisset、この二重チェックの必要はありません。さらに、$chunkは関数の必須パラメーターであるため、関数に渡す必要があります。そうしないと、PHPから文句が返されます。これは、このチェックを省略できることを意味します(これが「空」とも呼ばれる偽物if ($chunk)かどうかを確認するため)。ただし、何も含まれていない場合は、何も起こりません。したがって、この関数本体全体はに短縮できます。つまり、この関数全体がかなり不要です。$chunkreturn $string . $chunk
だます

1
変数を設定することも、空にすることもできます。たとえば、値が ""の変数は空ですが設定されています。
アーロン

1
はい、しかし私はあなたの関数が非常に冗長な書き方だと言っています$foo . $bar。機能が何か異なる場合、重要なケースを見つけることをお勧めします。:)
だます

3

私はこれが少し前に質問/回答されたことを知っていますが、割り当て演算子ではなく、一般的な文字列連結の使用法について誰もコメントしていませんが、機能的に同等であるため、この回答を提供します。

文字列連結のためのsprintfドキュメンテーション)ファミリーの関数の使用を調べたい場合があります。2つの文字列を代入演算子で組み合わせるだけの場合よりも、より多くのサニタイズと使いやすさが提供されます。

$foo = 'foo';

$append = sprintf('%1$s%2$s', $foo, 'bar');
var_dump($append);
/* string(6) "foobar" */

$prepend = sprintf('%1$s%2$s', 'bar', $foo);
var_dump($prepend);
/* string(6) "barfoo" */

$prependInvert = sprintf('%2$s%1$s', $foo, 'bar');
var_dump($prependInvert);
/* string(6) "barfoo" */

$wrap = sprintf('%2$s%1$s%2$s', $foo, 'bar');
var_dump($wrap);
/* string(6) "barfoobar" */

vsprintf配列を使用すると、個々の引数よりも値の位置を管理する方が簡単なので、通常はを使用します。

$vprepend = vsprintf('%2$s%1$s', array('foo', 'bar'));
var_dump($vprepend);
/* string(6) "barfoo" */

また、値の配列を使用するとimplode、単純な文字列連結の結果の値のセットを簡単に作成できます。

 var_dump(implode('', array('bar', 'foo')));
 /* string(6) "barfoo" */

残念ながら、sprintf()は単純な連結ほど高速ではないと思います。そして、それは確かに構文的にもあまりフレンドリーではないように見えます。参照:stackoverflow.com/q/7147305/2430549
HoldOffHunger 2018

正解ですが、構文にやさしいという意味はわかりません。ただし、連結ほど高速でも単純でもありません。sprintf複数の言語で一般的に使用されています。sprintfそれをいつ使用するかについて、その場所と目的があります。例えば。複数の値のキャスト、またはを使用した複数の入力の強制により、必要sprintfなときに単純な連結よりも多くの機能が提供されます。3v4l.org/8PWilを参照してください。ただし、連結の完全な代替として使用しないでください。
fyrye

3

組み込み関数をラップすることができますsubstr_replace。ここで、引数$ startおよび$ lengthを0に設定できます。これにより、$ stringの前に$ replacementが付加され、次のように結果が返されます。

function prepend(& $string, $prefix) {
    $string = substr_replace($string, $prefix, 0, 0);
}

ヘルパー関数の使用例は次のとおりです。

$email_message = "Jonathan";
$appropriate_greeting = "Dear ";
prepend($email_message, $appropriate_greeting);
echo $email_message;

あなたが手続き型プログラミングに夢中なら、それはです。


substr_replaceを使用することに興味がないようです。$string = $prefix.$string;関数内で単純な操作を行うと、うまくいきます。
Pierre-Olivier Vares 2017

2

ターニングBlakethepattonさんのコメント(ありがとう)の答えには、長い変数名のために、よりきれいにこれを行う方法は、使用している参照次のように変数にします:

$f = &$foo; $f = "bar{$f}";

これにより、元の変数名が12文字以上の場合、Eric V回答を上書きする必要がなくなります。

1行の代替:

$f = 'bar' . ($f = &$foo);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.