¿Algún equivalente a. = Para agregar al comienzo de la cadena en PHP?

103

Solo me pregunto si hay algo como. = Para agregar texto al comienzo de una cadena, por ejemplo:

$foo =. 'bar';

que no funciona.

Editar: el ejemplo fue originalmente $foo =. $bar;que se puede lograr con$bar .= $foo;

yuttadhammo
fuente
Doy fe de James, aunque debería haber escrito una respuesta ...
Christian
6
Eso se suma $fooa $bar, en lugar de anteponer $bara $foo. El resultado es similar, pero creo que quiere mutar $foo.
Eric V
Estaba destinado a ser un comentario irónico (por eso es un comentario, no una respuesta).
James Allardice
1
ugh ... lo siento, mal ejemplo ... arreglado ahora :)
yuttadhammo

Respuestas:

161

No Pero tu puedes hacer

$foo = "bar" . $foo
Eric V
fuente
4

Siempre puedes hacer tu propia función para eso:

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

$string sería la pieza que quieres anteponer y $chunk sería el texto al que desea agregar algo.

Se podría decir que los cheques son opcionales, pero al tenerlos allí, no necesita preocuparse por pasar un valor nulo por accidente.

Aaron
fuente
1
Gracias, tienes razón. Definitivamente no es tan fácil o rápido como algo integrado. Siéntase libre de copiar y pegar si eso ayuda a hacerlo más fácil: D
Aaron
7
Si algo es !emptytambién es siempre isset, no es necesario hacer esta doble verificación. Además, dado que $chunkes un parámetro obligatorio de la función, debe pasarse a la función o PHP se quejará. Esto significa que esta verificación se puede abreviar a if ($chunk)(para ver si es falsa, también conocida como "vacía"). Pero, si $chunkno contiene nada, no pasará nada de todos modos. Así que todo este cuerpo de función se puede abreviar como return $string . $chunk. Lo que significa que toda esta función es bastante innecesaria.
diciembre
1
Puede establecer una variable pero también estar vacía. Por ejemplo, una variable con el valor de "" está vacía pero también establecida.
Aaron
1
Sí, pero estoy diciendo que tu función es una forma muy detallada de escribir $foo . $bar. Lo desafío a encontrar cualquier caso importante en el que su función haga algo diferente. :)
diciembre
3

Sé que esto se preguntó / respondió hace un tiempo, pero proporcioné esta respuesta, ya que es funcionalmente equivalente a pesar de que no es un operador de asignación y nadie comentó sobre su uso para la concatenación general de cadenas.

Es posible que desee estudiar el uso de la familia de funciones sprintf( documentación ) para la concatenación de cadenas. Proporciona mucha más desinfección y facilidad de uso que simplemente combinar dos cadenas con operadores de asignación.

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

Normalmente lo uso vsprintf, ya que trabajar con matrices es más fácil de administrar posiciones de valor que argumentos individuales.

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

También con una matriz de valores, uno puede simplemente implodeel conjunto de valores resultante para una simple concatenación de cadenas.

 var_dump(implode('', array('bar', 'foo')));
 /* string(6) "barfoo" */
fyrye
fuente
Desafortunadamente, no creo que sprintf () sea tan rápido como simples concats. Y ciertamente tampoco parece tan amigable con la sintaxis. Ver: stackoverflow.com/q/7147305/2430549
HoldOffHunger
Correcto, aunque no estoy seguro de a qué se refiere con la sintaxis amigable. Si bien no es tan rápido o simplista como la concatenación. sprintfse utiliza comúnmente en varios idiomas. sprintftiene su lugar y propósito sobre cuándo usarlo. p.ej. la conversión de múltiples valores o la aplicación de una serie de entradas mediante sprintf, le proporciona más funcionalidad que la simple concatenación cuando se requiere . Ver: 3v4l.org/8PWil Pero no debe usarse como un reemplazo completo para la concatenación.
fyrye
3

Puede ajustar la función incorporada substr_replace, donde los argumentos $ start y $ length se pueden establecer en 0, lo que antepone el $ replacement a $ string y devuelve el resultado, así:

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

Un ejemplo de uso de la función auxiliar sería:

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

Si te gusta la programación procedimental, claro está.

sde-simon
fuente
No veo el interés de usar substr_replace; hacer un simple $string = $prefix.$string;en la función hará el truco.
Pierre-Olivier Vares
2

Al convertir el comentario de Blakethepatton en una respuesta (gracias), una forma de hacer esto de manera más ordenada para nombres de variables más largos es utilizando una referencia a la variable de la siguiente manera:

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

Esto le evitará tener que escribir la respuesta de Eric V si su nombre de variable original tiene 12 caracteres o más.

Una alternativa en una línea:

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