Reputation: 183
Not very sure how to word this question but I'll give an example.
$string = 'Hey, $name. How are you?';
When I post this string, $name
doesn't change. How can I make it so I can put something like +name+
so it changes to the name. I've tried seaching for it but I don't know what to search for so I don't have any luck. It's probably really simple but i'm just blanking out.
Thanks
Upvotes: 17
Views: 33437
Reputation: 365
Another way to achieve this is to use msgfmt_format_message
You must have the intl
extension enabled. Profile of the method is:
msgfmt_format_message(string $locale, string $pattern, array $values): string|false`
For example:
$name = "Alica";
$string = msgfmt_format_message('en_US', 'Hey, {0}. How are you?', array($name));
Would return: Hey, Alica. How are you?
Upvotes: 0
Reputation: 2911
I've always been a fan of strtr
.
$ php -r 'echo strtr("Hi @name. The weather is @weather.", ["@name" => "Nick", "@weather" => "Sunny"]);'
Hi Nick. The weather is Sunny.
The other advantage to this is you can define different placeholder prefix types. This is how Drupal does it; @
indicates a string to be escaped as safe to output to a web page (to avoid injection attacks). The format_string command loops over your parameters (such as @name
and @weather
) and if the first character is an @
, then it uses check_plain
on the value.
Upvotes: 23
Reputation: 101614
You can use place-holders and str_replace
. Or use PHP's built-in sprintf
and use %s
. (And as of v4.0.6 you can swap the ordering of arguments if you'd like).
$name = 'Alica';
// sprintf method:
$format = 'Hello, %s!';
echo sprintf($format, $name); // Hello, Alica!
// replace method:
$format = "Hello, {NAME}!";
echo str_replace("{NAME}", $name, $format);
And, for anyone wondering, I understood that is trouble templating a string, not PHP's integrated concatenation/parsing. I just assume keep this answer up though as I'm still not 100% sure this OP's intent
Upvotes: 31
Reputation: 12566
A third solution, no better or worse than the aforementioned, is concatenation:
echo 'Hello '. $name .'!!!';
Upvotes: 2
Reputation:
You should be wrapping the string in double quotes ("
) if you want variables to be expanded:
$name = "Alica";
$string = "Hey, $name. How are you?"; // Hey, Alica. How are you?
Upvotes: 11