Chris, et al --

...and then Chris said...
% 
% Let's say I need to take one of 20 actions depending on a form selection. I 
% could use a switch statement with 20 cases, but I could also do something 
% like:
% 
% // Pretend this comes from a form
% $formchoice = "mars";
% 
% 
% $response = array(
%  "mars" => "go_mars()",
%  "mercury" => "go_mercury()",
%  "earth" => "go_earth()");
% 
% foreach ($response as $choice => $action)
% {
%  if (strtoupper($formchoice) == strtoupper($choice))
%   {
%   eval("$action;");
%   }
% }
%       
% But are there even better ways? 

I'm just pulling this out of my ear, but assuming the structure you gave
what about a simple

  eval("$response[$formchoice];") ;

to match if it matches and do nothing if it doesn't?  In fact, I got
curious, so here is some test code I just whipped up; note that when the
choice is 'comet' nothing happens.

  function go_mars()
    { print "Welcome to mars, dude!\n" ; }
  $formchoice = "comet" ;
  $response = array
    (
      "mars" => "go_mars()" ,
      "mercury" => "go_mercury()" ,
      // continue ad nauseam
    ) ;
  print "Will we eval?\n" ;
  eval ("$response[$formchoice];") ;
  print "DONE!\n" ;

Seems like this ought to be pretty safe since you're writing the go_*
functions and otherwise nothing matches and you eval a "".


HTH & HAND

:-D
-- 
David T-G                      * There is too much animal courage in 
(play) [EMAIL PROTECTED] * society and not sufficient moral courage.
(work) [EMAIL PROTECTED]  -- Mary Baker Eddy, "Science and Health"
http://justpickone.org/davidtg/      Shpx gur Pbzzhavpngvbaf Qrprapl Npg!

Attachment: pgp00000.pgp
Description: PGP signature

Reply via email to