Re: [PHP-DEV] python dictionary-like % (percent) substitution in php (was: Good idea in % (percent) substitutions in string) From: Jo Giraerts (jo <email protected>)
Date: 08/28/01

This is already possible in php, though with the following simple
function..

   // function to read a file with php-vars in as a string
   // $predefined_vars: an array ("varname" => "value"). all the
   // variablenames defined in this array can be used in the bodyfile.
   // They will receive the respective values. This makes personalising
   // the mailes easier..
   function file_as_body($filename, $predefined_vars)
   {
      $ar = file($filename);
      extract($predefined_vars);

      foreach ($ar as $number => $line)
      {
         eval("\$ar2[] = \"$line\";");
      }

      return implode("",$ar2);
   }

and for instance this file as template:

<--- template file
You received a file on (" . date("d/m/Y (H:i)") . ")

filename: ".basename($file) ."
filesize: ".filesize($file) ."
mimetype: $mimetype

Hope you enjoy it..
--->

You can even use php-code already, thanks to eval :)

Maybe we better make it a PEAR-thing?

On Tue, Aug 28, 2001 at 12:25:15PM +0200, wrote:
> I have seen that in php there isn't nothing similar to dictionary
> substitution in python.
> (a dictionary is an array with string keys, like hash in perl)
>
> This change consist in adding two functions ("a" stay for "array"):
> aprintf(string format, array dict) -- like printf, print the result
> saprintf(string format, array dict) -- like sprintf, return the result
>
> It works like this (written in php-like language):
>
> format -> "my name is %(name)s and i'm %(age)s"
> dict -> array( name=>"tom", age=> "eighteen" );
>
> (in php, unlike python, is possible to make an array with both string and
> number indices, so the format can be also %(2)s,...)
>
> aprintf(format,dict) -- print "my name is tom and i'm eighteen"
> saprintf(format,dict) -- return "my name is tom and i'm eighteen"
>
> in python, these substitutions are very useful, especially in cgi
> programming, for making templates from text files, in php could be
> useful in, for example, language customisation, or message formatting,
> etc...
>
> An example:
> if ($lang == "it")
> define("MESSAGE","il %(animal)s %(color)s sta %(action)s %(target)s");
> else
> define("MESSAGE","the %(color)s %(animal)s is %(action)s");
>
> aprintf(MESSAGE,array(animal=>"cobra",color=>"green",action=>"eating",target
> =>"mouse"));
> // if the %(target)s isn't found, is ignored.
>
>
> (the "s" terminator could be substituted with other letters, like d for
> numbers, etc...)
>
> This approach has several advantages over something like this:
> "the $color $animal is $action"
> because in this phrase, variables are substituted when the parser execute
> it, and in this case:
> "the %(color)s %(animal)s is %(action)s"
> parameters are substituted only when the phrase is parsed with a specialized
> function like aprintf
>
>
>
> I think that this is a good idea and could save a lot of time when the
> program need to be as modular as possible.
>
> ----------------
> Federico Marani
> flagzenNO-SPAM <email protected>
> ----------------
>
>
>
>
> --
> PHP Development Mailing List <http://www.php.net/>
> To unsubscribe, e-mail: php-dev-unsubscribe <email protected>
> For additional commands, e-mail: php-dev-help <email protected>
> To contact the list administrators, e-mail: php-list-admin <email protected>
>

-- 
Jo Giraerts
Computerprutser
Life BVBA
Interleuvenlaan 15A, 3001 LEUVEN, BELGIUM
icq:81939849, email:jo <email protected>, ph0ne:+32(0)16 20 89 61 
pgp-key available at: http://www.keyserver.net. 
fingerprint: 81EE B1FD 88E2 A03A 4F49 6D8A 806E 2220 9C2F 918B 

I've got these opium queens that move around my space, I said it's waste not, want not, I think I'll take another, I'm holding all this pain that I'm trying to smother. <branvan3000 - Afrodisiac>

-- PHP Development Mailing List <http://www.php.net/> To unsubscribe, e-mail: php-dev-unsubscribe <email protected> For additional commands, e-mail: php-dev-help <email protected> To contact the list administrators, e-mail: php-list-admin <email protected>