Re: variable replacement in string [message #178018 is a reply to message #178017] |
Thu, 10 May 2012 16:38 |
M. Strobel
Messages: 386 Registered: December 2011
Karma:
|
Senior Member |
|
|
Am 10.05.2012 18:37, schrieb M. Strobel:
> Am 10.05.2012 16:10, schrieb Sandman:
>> In article <a11rgoFph0U1(at)mid(dot)uni-berlin(dot)de>,
>> "M. Strobel" <sorry_no_mail_here(at)nowhere(dot)dee> wrote:
>>
>>> Hi,
>>>
>>> I am still searching a function in PHP to execute variable replacement in
>>> strings.
>>> Other languages do have this, but for PHP I can only find sprintf() and
>>> string replace.
>>>
>>> I have
>>>
>>> $t = ' - solved - ';
>>> $msg = 'The problem is $t';
>>>
>>> I want now:
>>>
>>> echo fxx($msg);
>>>
>>> print out "The problem is - solved - ".
>>>
>>> Please don't tell me about $msg = "The problem is $t"; just think of $msg
>>> like a
>>> template read from a file.
>>>
>>> /Str.
>>
>> Before coding PHP I used Roxen and their "RXML" language, which was
>> pretyt much just fancy HTML (RXML stood for Roxen Markup Language) and
>> they had variable templating in strings. When moving to PHP I missed
>> this.
>>
>> So I have this templet string for headline formatting in blog posts
>> (for instance):
>>
>> $template = "<h2>#headline#</h2>
>> #date#, <span class='subline'>#category#</span>";
>>
>> And then I have an array with the blog post:
>>
>> $article = array(
>> "headline" => "Hello world!",
>> "date" => "2012-04-23",
>> "category" => "Fun stuff"
>> );
>>
>> And I have this function I call "parserxml()" which is "Parse rxml"
>> not "parser xml" :)
>>
>> function parserxml($string, $var = false) {
>> # RXML 1.0
>> $string = preg_replace("/#([a-z]+)#/se", "\$var['\\1']",
>> $string);
>> # RXML 2.0
>> if (preg_match_all("/&([a-z_A-Z]+)\./i", $string, $matches)) {
>> foreach($matches[1] as $m) {
>> global $$m;
>> }
>> $string =
>> preg_replace("/&([a-zA-Z_]+)\.([a-zA-Z_]+);/sei", "\${\\1}['\\2']",
>> $string);
>> }
>> return $string;
>> }
>>
>> Which I use as such:
>>
>> print parserxml($template, $article);
>>
>> You may also note that there is support for "RXML 2.0" in that
>> function as well, which used a slightly different syntax that could
>> define scope as well:
>>
>> $template = "<h2>#headline#</h2>&user.name;"
>>
>> The second part would globalize $user and replace that with
>> $user["name"].
>
> This type of solution was commented already with a one-liner: create my own variable
> system?
>
> Thank you for this complete proposal. You are the first to know what I am missing.
oops, wrong translation, must be "who knows" ^^^^^^^
|
|
|