Gibt es ein Äquivalent zu. = Zum Hinzufügen zum Anfang eines Strings in PHP?

103

Ich frage mich nur, ob es so etwas wie. = Zum Hinzufügen von Text am Anfang eines Strings gibt, z.

$foo =. 'bar';

was nicht funktioniert.

Bearbeiten: Beispiel war ursprünglich, $foo =. $bar;was mit erreicht werden kann$bar .= $foo;

Yuttadhammo
quelle
Ich verbürge mich für James ', obwohl er eine Antwort darauf hätte schreiben sollen ...
Christian
6
Das hängt $fooan $bar, anstatt $barvor $foo. Das Ergebnis ist ähnlich, aber ich denke, er möchte mutieren $foo.
Eric V
Es sollte ein ironischer Kommentar sein (weshalb es ein Kommentar ist, keine Antwort)!
James Allardice
1
ugh ... sorry, schlechtes Beispiel ... jetzt behoben :)
yuttadhammo

Antworten:

161

Nee. Aber du kannst es tun

$foo = "bar" . $foo
Eric V.
quelle
harte Gesichtspalme danke
Nick Rolando
4

Sie können dafür immer Ihre eigene Funktion erstellen:

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

$stringwäre das Stück, das Sie voranstellen möchten, und $chunkwäre der Text, dem etwas vorangestellt werden soll.

Sie könnten sagen, dass die Überprüfungen optional sind, aber wenn Sie sie dort haben, müssen Sie sich keine Sorgen machen, dass Sie versehentlich einen Nullwert übergeben.

Aaron
quelle
1
Danke, du hast aber recht. Es ist definitiv nicht so einfach oder schnell wie etwas Eingebautes. Sie können es gerne kopieren und einfügen, wenn dies einfacher ist: D
Aaron
7
Wenn etwas ist, ist !emptyes auch immer isset, keine Notwendigkeit für diese doppelte Überprüfung. Da dies $chunkein erforderlicher Parameter der Funktion ist, muss er außerdem an die Funktion übergeben werden, sonst beschwert sich PHP. Dies bedeutet, dass diese Prüfung abgekürzt werden kann if ($chunk)(um festzustellen, ob sie falsch ist, auch bekannt als "leer"). Aber wenn $chunknichts enthalten ist, passiert sowieso nichts. Dieser ganze Funktionskörper kann also abgekürzt werden return $string . $chunk. Was bedeutet, dass diese ganze Funktion ziemlich unnötig ist.
Täuschung
1
Sie können eine Variable festlegen, aber auch leer sein. Beispielsweise ist eine Variable mit dem Wert "" leer, wird aber auch gesetzt.
Aaron
1
Ja, aber ich sage, Ihre Funktion ist eine sehr ausführliche Art zu schreiben $foo . $bar. Ich fordere Sie auf, einen wichtigen Fall zu finden, in dem Ihre Funktion etwas anderes tut. :)
täuschen
3

Ich weiß, dass dies vor einiger Zeit gefragt / beantwortet wurde, aber diese Antwort ist funktional gleichwertig, obwohl es sich nicht um einen Zuweisungsoperator handelt und niemand seine Verwendung für die allgemeine Verkettung von Zeichenfolgen kommentiert hat.

Möglicherweise möchten Sie die Verwendung der sprintf( Dokumentations- ) Funktionsfamilie für die Verkettung von Zeichenfolgen untersuchen. Es bietet viel mehr Desinfektion und Benutzerfreundlichkeit als nur das Kombinieren von zwei Zeichenfolgen mit Zuweisungsoperatoren.

$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" */

Normalerweise verwende ich vsprintf, da die Arbeit mit Arrays einfacher zu verwalten ist als einzelne Argumente.

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

Auch mit einem Array von Werten kann man einfach implodeden resultierenden Wertesatz für eine einfache Verkettung von Strings verwenden.

 var_dump(implode('', array('bar', 'foo')));
 /* string(6) "barfoo" */
fyrye
quelle
Leider denke ich nicht, dass sprintf () so schnell ist wie einfache Concats. Und es scheint auch nicht annähernd so syntaxfreundlich zu sein. Siehe: stackoverflow.com/q/7147305/2430549
HoldOffHunger
Richtig, aber nicht sicher, wie Sie mit syntaxfreundlich meinen. Es ist zwar nicht so schnell oder simpel wie die Verkettung. sprintfwird häufig in mehreren Sprachen verwendet. sprintfhat seinen Platz und Zweck, wann es verwendet werden soll. z.B. Das Umwandeln mehrerer Werte oder das Erzwingen einer Reihe von Eingaben mithilfe von sprintfbietet mehr Funktionen als die einfache Verkettung, wenn dies erforderlich ist . Siehe: 3v4l.org/8PWil Es sollte jedoch nicht als vollständiger Ersatz für die Verkettung verwendet werden.
Fyrye
3

Sie können die integrierte Funktion substr_replaceumbrechen, wobei die Argumente $ start und $ length auf 0 gesetzt werden können, wodurch die $ -Ersetzung an $ string vorangestellt wird und das Ergebnis wie folgt zurückgegeben wird:

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

Ein Beispiel für die Verwendung der Hilfsfunktion wäre:

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

Wenn Sie sich für prozedurale Programmierung interessieren, ist das so.

sde-simon
quelle
Ich sehe kein Interesse daran, substr_replace zu verwenden. Wenn Sie eine einfache $string = $prefix.$string;Funktion ausführen, reicht dies aus.
Pierre-Olivier Vares
2

Wenn Sie den Kommentar von Blakethepatton in eine Antwort verwandeln (danke), können Sie dies bei längeren Variablennamen besser tun, indem Sie wie folgt auf die Variable verweisen :

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

Dies erspart Ihnen das Eingeben der Antwort von Eric V, wenn Ihr ursprünglicher Variablenname 12 Zeichen oder länger ist.

Eine Alternative in einer Zeile:

$f = 'bar' . ($f = &$foo);
Robrecord
quelle