107 votes

Y a-t-il un équivalent à .= pour ajouter au début d'une chaîne de caractères en PHP ?

Je me demande s'il existe 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; ce qui peut être réalisé avec $bar .= $foo;

177voto

Eric V Points 291

Non. Mais vous pouvez faire

$foo = "bar" . $foo

4voto

Aaron Points 2581

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;
     }
}

$string serait le morceau que vous voulez ajouter au début et $chunk serait le texte auquel vous voulez ajouter quelque chose.

On pourrait dire que les vérifications sont facultatives, mais cette mention permet de ne pas craindre de transmettre une valeur nulle par accident.

3voto

fyrye Points 759

Je sais que cette question a été posée/répondue il y a un certain temps, mais je fournis cette réponse car elle est fonctionnellement équivalente bien qu'il ne s'agisse pas d'un opérateur d'assignation et que personne n'a commenté son utilisation pour la concaténation générale de chaînes de caractères.

Vous pouvez envisager l'utilisation de l'option sprintf ( documentation ) de fonctions pour la concaténation de chaînes de caractères. Elle fournit beaucoup plus d'assainissement et de convivialité que la simple combinaison de deux chaînes de caractères 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 Il est donc plus facile de gérer les positions des valeurs dans les tableaux que dans les arguments individuels.

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

De même, avec un tableau de valeurs, on peut simplement implode l'ensemble des valeurs résultantes pour une simple concaténation de chaînes de caractères.

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

3voto

simon_ Points 28

Vous pouvez envelopper la fonction intégrée substr_replace où les arguments $start et $length peuvent être mis à 0, qui fait précéder le $replacement de $string et renvoie le résultat, comme suit :

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

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

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

Si vous êtes adepte de la programmation procédurale, bien sûr.

2voto

robrecord Points 184

Tournage Commentaire de Blakethepatton dans une réponse (merci), un moyen de faire cela plus proprement pour les noms de variables plus longs est d'utiliser un fichier référence à la variable comme suit :

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

Cela vous évitera de taper sur le réponse d'Eric V si le nom original de votre variable comporte 12 caractères ou plus.

Une alternative sur une ligne :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X