2012-01-03 24 views
8

No estoy muy seguro de cómo redactar esta pregunta pero daré un ejemplo. $ string = 'Hola, $ nombre. ¿Cómo estás?'; Cuando publico esta cadena, $ nombre no cambia. ¿Cómo puedo hacerlo para poder poner algo como + nombre + por lo que cambia el nombre. Intenté buscarlo, pero no sé qué buscar, así que no tengo suerte. es probablemente muy simple, pero estoy en blanco. Gracias cómo reemplazar un marcador de posición en una cadena?

+0

Sintaxis básica de PHP: http://php.net/manual/en/language.types.string.php –

Respuesta

15

Puede usar marcadores de posición y str_replace. O use PHP incorporado sprintf y use %s. (Y a partir de v4.0.6 puede intercambiar el orden de argumentos si lo desea).

$name = 'Alica'; 

// sprintf method: 
$format = 'Hello, %s!'; 
echo sprintf($format, $name); // Hello, Alica! 

// replace method: 
$format = "Hello, {NAME}!"; 
echo str_replace("{NAME}", $name, $format); 

Y, para cualquiera que se pregunte, que entiende que es un problema templating una cadena, no de PHP integrado concatenación/análisis. Asumo mantener esta respuesta a pesar de que todavía no estoy 100% seguro de la intención de este PO

+0

eso es lo que estaba buscando, str_replace(); Gracias. No podría por la vida de mí resolverlo. –

+0

@Alica: No hay problema. Y si esta respuesta fue útil, asegúrese de aceptarla (al igual que con las otras preguntas que hizo). La aprobación de respuestas anteriores no solo le da crédito a la persona, sino que la convierte en un recurso para futuros visitantes y hace que los demás quieran ayudarlo más.) –

+0

'Y a partir de v4.0.6 ...' Espero que no lo menciones porque crees que las personas están usando algo inferior a PHP 4;) –

6

Usted debe envolver la cadena entre comillas dobles (") si quieren variables para ampliarse:

$name = "Alica"; 
$string = "Hey, $name. How are you?"; // Hey, Alica. How are you? 

See the documentation.

+0

Limpio y simple, genial. –

0

Una tercera solución, ni mejor ni peor que el anterior, es la concatenación:

echo 'Hello '. $name .'!!!';

5

I Siempre he sido fan de strtr.

$ php -r 'echo strtr("Hi @name. The weather is @weather.", ["@name" => "Nick", "@weather" => "Sunny"]);' 
Hi Nick. The weather is Sunny. 

La otra ventaja de esto es que puede definir diferentes tipos de prefijo de marcador de posición. Así es como lo hace Drupal; @ indica que una cadena escapada es segura para enviar a una página web (para evitar ataques de inyección). El comando format_string recorre sus parámetros (como @name y @weather) y si el primer carácter es @, utiliza check_plain en el valor.

+1

Esta es una buena respuesta porque también evita algunos escollos que restringen los encuentros: http://php.net/manual/en/function.strtr. php # 117169 –

Cuestiones relacionadas