2013-10-01 3 views
3

поэтому у меня есть функция, которая обрабатывает различные другие функции, и я использую оператор switch для обработки этих функций с помощью cases и breaks.Конвертировать в массив

Все работает отлично. Можно ли изменить это на array с keys?

Вот код

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; 
} 
+0

возможно дубликат [Анонимная функция в массиве] (http://stackoverflow.com/questions/3219382/anonymous-function-in-array) – Brian

ответ

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 
} 
+0

Спасибо, это то, что я хотел, и это работает! – user2524169

+0

'in_array' должно быть изменено на' array_key_exists', если вы хотите совместить ключ (т. Е. A, b и т. Д.). – kel

3

Вы ищете in_array(), что кажется:

синтаксиса
if(in_array($intMultiFun, ['a', 'b', 'c', 'd'])) 
{ 
    //handle a function 
} 

массивов коротких текстовым был введен в 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]); 
} 
+0

Я хочу обрабатывать различные функции и b для обработки другой функции. – user2524169

+1

Хм, ваш вопрос указывает на ту же функцию. Я отредактирую –

1

Если вы хотите вызвать различные функции для каждого ключа:

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

$funcs['a'](); // calls a_function 
+0

@pNure, как вы передадите аргументы? – Pupil

+0

'$ funcs ['a'] ('arg1', 'arg2', ...);' – pNre

Смежные вопросы