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;
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;
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
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 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 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 sprintf
le 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_replace
donde 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.
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);
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$bar
en 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