Tout équivalent à. = Pour ajouter au début de la chaîne en PHP?

104

Je me demande simplement s'il y a quelque chose comme. = Pour ajouter du texte au début d'une chaîne, par exemple:

$foo =. 'bar';

ce qui ne fonctionne pas.

Edit: l'exemple était à l'origine $foo =. $bar;qui peut être réalisé avec$bar .= $foo;

yuttadhammo
la source
Je me porte garant de James 'bien qu'il aurait dû écrire une réponse pour cela ...
Christian
6
Qui ajoute $fooà $bar, au lieu de préfixer $barà $foo. Le résultat est similaire, mais je pense qu'il veut muter $foo.
Eric V
C'était censé être un peu un commentaire ironique (c'est pourquoi c'est un commentaire, pas une réponse)!
James Allardice
1
ugh ... désolé, mauvais exemple ... corrigé maintenant :)
yuttadhammo

Réponses:

162

Nan. Mais tu peux faire

$foo = "bar" . $foo
Eric V
la source
4

Vous pouvez toujours créer votre propre fonction pour cela:

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

$stringserait l'élément que vous souhaitez ajouter au début et $chunkle texte que vous souhaitez ajouter au début.

Vous pourriez dire que les vérifications sont facultatives, mais en les contenant, vous n'avez pas à vous soucier de transmettre une valeur nulle par accident.

Aaron
la source
1
Merci, vous avez raison. Ce n'est certainement pas aussi facile ou rapide que quelque chose de intégré. N'hésitez pas à copier et coller si cela facilite les choses: D
Aaron
7
Si quelque chose est !emptytoujours isset, pas besoin de cette double vérification. De plus, puisque $chunkc'est un paramètre obligatoire de la fonction, il doit être passé à la fonction ou PHP se plaindra. Cela signifie que cette vérification peut être abrégée en if ($chunk)(pour voir si elle est fausse ou "vide"). Mais, s'il $chunkne contient rien, rien ne se passera de toute façon. Donc, tout ce corps de fonction peut être abrégé en return $string . $chunk. Ce qui signifie que toute cette fonction est assez inutile.
deceze
1
Vous pouvez avoir une variable définie mais également vide. Par exemple, une variable avec la valeur "" est vide mais également définie.
Aaron
1
Oui, mais je dis que votre fonction est une manière très verbeuse d'écrire $foo . $bar. Je vous mets au défi de trouver n'importe quel cas important où votre fonction fait quelque chose de différent. :)
deceze
3

Je sais que cela a été demandé / répondu il y a quelque temps, mais en fournissant cette réponse car elle est fonctionnellement équivalente bien qu'elle ne soit pas un opérateur d'affectation et que personne n'a commenté son utilisation pour la concaténation générale de chaînes.

Vous voudrez peut-être examiner l'utilisation de la famille de fonctions sprintf( documentation ) pour la concaténation de chaînes. Il fournit beaucoup plus de nettoyage et de convivialité que la simple combinaison de deux chaînes avec des opérateurs d'affectation.

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

J'utilise normalement vsprintf, car travailler avec des tableaux est plus facile à gérer des positions de valeur que des arguments individuels.

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

Aussi avec un tableau de valeurs, on peut simplement implodele jeu de valeurs résultant pour une concaténation de chaîne simple.

 var_dump(implode('', array('bar', 'foo')));
 /* string(6) "barfoo" */
fyrye
la source
Malheureusement, je ne pense pas que sprintf () soit aussi rapide que de simples concats. Et cela ne semble certainement pas aussi convivial pour la syntaxe. Voir: stackoverflow.com/q/7147305/2430549
HoldOffHunger
Correct, mais je ne sais pas comment vous entendez par convivialité de la syntaxe. Bien que ce ne soit pas aussi rapide ou simpliste que la concaténation. sprintfest couramment utilisé dans plusieurs langues. sprintfa sa place et son but sur le moment de l'utiliser. par exemple. la conversion de plusieurs valeurs ou l'application d'un certain nombre d'entrées à l'aide de sprintf, vous offre plus de fonctionnalités qu'une simple concaténation lorsque cela est nécessaire . Voir: 3v4l.org/8PWil Mais il ne doit pas être utilisé comme un remplacement complet pour la concaténation.
fyrye
3

Vous pouvez encapsuler la fonction intégrée substr_replace, où les arguments $ start et $ length peuvent être définis sur 0, ce qui ajoute le remplacement $ à $ string et renvoie le résultat, comme ceci:

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

Un exemple d'utilisation de la fonction d'assistance serait:

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

Si vous êtes dans la programmation procédurale, c'est.

sde-simon
la source
Je ne vois pas l'intérêt d'utiliser substr_replace; faire un simple $string = $prefix.$string;dans la fonction fera l'affaire.
Pierre-Olivier Vares
2

En transformant le commentaire de Blakethepatton en réponse (merci), un moyen de le faire plus proprement pour les noms de variables plus longs consiste à utiliser une référence à la variable comme suit:

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

Cela vous évitera de taper la réponse d'Eric V si votre nom de variable d'origine est de 12 caractères ou plus.

Une alternative sur une seule ligne:

$f = 'bar' . ($f = &$foo);
robrecord
la source