How to dynamically create a string in PHP?
Question by All
I have a predefined pattern for building a string, which should be created regularly throughout the script.
$str="$first - $second @@ $third"; // pattern for building the string
$first="word1";
$second="word2";
$third="word3";
$string= ..?? // string should be built here based on the pattern
Currently, I am using eval
to generate the string in place based on the pattern originally defined. However, as this happens occasionally and eval
is generally bad, I wish to find another method.
NOTE that the pattern is defined only one time above all codes, and I can edit the pattern of all the script by one line only. Thus, what makes $string
should not be touched for any change.
I tried create_function
, but needs the same number of arguments. With eval
, I can easily change the pattern, but with create-function
, I need to change the entire script. For example, if changing the string pattern to
$str="$first @@ $second"; // One arg/var is dropped
eval Example:
$str="$first - $second @@ $third"; // Pattern is defined one-time before codes
$first="word1";
$second="word2";
$third="word3";
eval("$string = "$str";");
create_function Example:
$str=create_function('$first,$second,$third', 'return "$first - $second @@ $third";');
$string=$str($first,$second,$third);
Answer by Vulcan
You can use the string formatting capabilities offered by sprintf
or vsprintf
.
$format = "%s - %s @@ %s"; // pattern for building the string
$first = "word1";
$second = "word2";
$third = "word3";
$string = sprintf($format, $first, $second, $third);
You can use vsprintf
if you wish to pass an array.
$format = "%s - %s @@ %s"; // pattern for building the string
$values = array($first, $second, $third);
$string = vsprintf($format, $values);
Answer by Starx
Seems to be rather simple thing to me. Use str_replace()
and replace based on patterns
$str="$first$ - $second$ @@ $third$"; // pattern for building the string
$first="word1";
$second="word2";
$third="word3";
$newstr = str_replace('$first$', $first, $str);
$newstr = str_replace('$second$', $second, $newstr);
$newstr = str_replace('$third$', $third, $newstr);