3

所以我有一个处理各种其他函数的函数,我使用一个switch语句来处理这些函数casesbreaks

一切正常。我可以将其更改为arraywithkeys吗?

这是代码

switch ($intMultiFun) {
    case "a":
        handle a function
        break;
    case "b":
        handle a function
        break;
    case "c":
        handle a function
        break;
    case "d":
        handle a function
        break;
}
4

3 回答 3

3
$map = array(
 'a' => 'a_func_name',
 'b' => 'b_func_handler_name',
  ...
);

if (array_key_exists($intMultiFun, $map)) {
   call_user_func($map[$intMultiFun]); // optionally you can pass parameters too
}
于 2013-10-01T14:49:07.090 回答
3

您正在寻找in_array(),似乎:

if(in_array($intMultiFun, ['a', 'b', 'c', 'd']))
{
   //handle a function
}

-short 数组语法是在 PHP>=5.4 中引入的,因此在较低版本中将

if(in_array($intMultiFun, array('a', 'b', 'c', 'd')))
{
   //handle a function
}

编辑

如果函数会有所不同,那么您应该将它们保存在数组中,例如:

$rgFunctions = ['a'=>'funcA', 'b'=>'funcB', 'c'=>'funcC', 'd'=>'funcD'];
if(array_key_exists($intMultiFun, $rgFunctions) &&
   function_exists($rgFunctions[$intMultiFun]))
{
   $mResult = call_user_func($rgFunctions[$intMultiFun]);
}
于 2013-10-01T14:46:12.940 回答
1

如果要为每个键调用不同的函数:

$funcs = array(
    'a' => 'a_function', 
    'b' => 'b_function', 
    'c' => 'c_function', 
    'd' => 'd_function');

$funcs['a'](); // calls a_function
于 2013-10-01T14:48:15.930 回答