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

4 minutos de lectura

avatar de usuario
yuttadhammo

Solo me preguntaba 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;

  • Respondo por James, aunque debería haber escrito una respuesta para eso …

    – cristiano

    18 de agosto de 2011 a las 17:54

  • que anexa $foo a $baren lugar de anteponer $bar a $foo. El resultado es similar, pero creo que quiere mutar. $foo.

    –Eric V

    18 de agosto de 2011 a las 17:56

  • ¡Estaba destinado a ser un comentario irónico (por eso es un comentario, no una respuesta)!

    –James Allardice

    18 de agosto de 2011 a las 18:01

  • ugh… lo siento, mal ejemplo… corregido ahora 🙂

    – yuttadhammo

    18 de agosto de 2011 a las 18:21

No. pero puedes hacer

$foo = "bar" . $foo

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 desea anteponer y $chunk sería el texto que desea agregarle algo.

Podría decir que los controles son opcionales, pero al tener eso allí no necesita preocuparse por pasar un valor nulo por accidente.

  • Gracias, pero 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 que sea más fácil: D

    – Aarón

    18 de agosto de 2011 a las 18:35

  • si algo es !empty también es siempre isset, no hay necesidad de esta doble verificación. Además, desde $chunk es un parámetro requerido de la función, necesidades para ser pasado a la función o PHP se quejará. Esto significa que esta verificación se puede abreviar a if ($chunk) (a ver si es falso también conocido como “vacío”). Pero si $chunk no contiene nada, no pasará nada de todos modos. Entonces, todo este cuerpo de función se puede abreviar a return $string . $chunk. Lo que significa que toda esta función es bastante innecesaria.

    – deceze

    19 de agosto de 2011 a las 4:28

  • Puede configurar una variable, pero también puede estar vacía. Por ejemplo, una variable con el valor de “” está vacía pero también establecida.

    – Aarón

    19 de agosto de 2011 a las 16:02

  • Sí, pero digo que su función es una forma muy detallada de escribir $foo . $bar. Lo desafío a encontrar cualquier caso importante donde su función haga algo diferente. 🙂

    – deceze

    20 de agosto de 2011 a las 7:40


avatar de usuario
Será.

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 examinar el uso de la sprintf (documentación) familia de funciones 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 uso vsprintfya 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 implode el conjunto resultante de valores para la concatenación de cadenas simple.

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

  • Desafortunadamente, no creo que sprintf() sea tan rápido como simples concatenaciones. Y ciertamente tampoco parece tan amigable con la sintaxis. Ver: stackoverflow.com/q/7147305/2430549

    – HoldOffHunger

    9 de abril de 2018 a las 17:23

  • Correcto, aunque no estoy seguro de qué quiere decir con sintaxis amigable. Si bien no es tan rápido o simplista como la concatenación. sprintf se usa comúnmente en varios idiomas. sprintf tiene su lugar y propósito sobre cuándo usarlo. p.ej. conversión de múltiples valores o hacer cumplir una serie de entradas utilizando sprintfle brinda más funcionalidad que la simple concatenación cuando es requerido. Ver: 3v4l.org/8PWil Pero no debe usarse como un reemplazo completo de la concatenación.

    – Será.

    09/04/2018 a las 22:46

Puede envolver la función incorporada substr_replacedonde los argumentos $inicio y $longitud se pueden establecer en 0, lo que antepone el $reemplazo a $cadena 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, eso es.

avatar de usuario
robercord

Convirtiendo el comentario de Blakethepatton en una respuesta (gracias), una forma de hacerlo de forma más ordenada para nombres de variables más largos es mediante el uso de un referencia a la variable de la siguiente manera:

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

Esto le ahorrará escribir sobre 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);

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad