2016-09-30 4 views
1

У меня есть входной переменной:Фильтр для многих вариант

$var_in="PDF Is from Adobe Acrobat"; 

я буду strsub() 3 первый и получить только "PDF"

$key_is=substr($var_in,0,3); 

У меня есть основной вариант, если найти из $ key_is

1.Option один с пунктами:

"PDF", "XML", "XLS", "DOC" 

будет работать somefunction1()

2.ОПЦИЯ Два

"PNG", "BMP", "JPG" 

запустить somefunction2()

3.Option Три

"DAT", "BAC", "SQL" 

запустить somefunction3()

старые пути использует

switch ($key_is) { 
    case "PDF": 
     runfunction1(); 
    break; 
    case "DAT": 
     runfunction3(); 
    break; 
... 
} 

как это сделать проще (возможно, какая-то функция)? если я добавлю новые товары из основной опции автоматически переходит на
подходящий вариант выбора функции.

, как это, если я добавить «GIF» из основного варианта

"PNG", "BMP", "JPG", "GIF" 

будет работать runfunction1() без мне нужно изменить переключатель

ответ

1

С помощью переключателя и in_array()

//set $test_type and start a switch 

    switch($test_type) { 
     case in_array($test_type, $array_opt1):{ 
      somefunction1(); 
      break; 
     } 
     case in_array($test_type, $array_opt2):{ 
      somefunction2(); 
      break; 
     } 
     case in_array($test_type, $array_opt3):{ 
      somefunction3(); 
      break; 
     } 
     default: { 
      someOtherfunction(); 
      break; 
     } 
    } 
0

Вы можете попробовать вставить каждую категорию опцию в категории массива , Таким образом, вы можете иметь

$imageCategories = ['images', 'PNG','BMP','GIF']; 
$dataCategories = ['data','PDF','XML','XLS']; 

затем передать массив в функцию, вызываемую, например

handleCategory($categoryArray) 

, а затем проверить только первый индекс массива, чтобы решить, какую функцию следует запускать

switch($categoryArray[0]) { 
case 'images': 
    runFunction1(); 
    break; 
1

Вы можете установить $ test_type = "your_type_name" и получить действия в соответствии с типом, указанным ниже

$test_type= "PDF"; 

     $array_opt1 = array("PDF", "XML", "XLS", "DOC"); 
     $array_opt2 = array("PNG", "BMP", "JPG"); 
     $array_opt3 = array("DAT", "BAC", "SQL"); 

     if(in_array($test_type, $array_opt1)){ 
     //send to relevant funcion for this group 
     somefunction1(); 
     } 
     else if (in_array($test_type, $array_opt2)) { 
      somefunction2(); 
     }else if(in_array($test_type, $array_opt3)){ 
      somefunction3(); 
     }else{ 
      someOtherfunction(); 
     } 
+1

Best, но если есть много вариант, будет использовать много «если». Могу ли я использовать switch/case для изменения «if»? – Artron

+0

функция in_array Является новой для меня, это отличная функция – Artron

+0

, которую вы можете сделать с помощью переключателя. См. Мой другой ответ .. – Janaka

0

вы могли бы построить свои массивы смарт

$key_is = "PDF" 

$array_opt1 = array("PDF", "XML", "XLS", "DOC"); 
$array_opt2 = array("PNG", "BMP", "JPG"); 
$array_opt3 = array("DAT", "BAC", "SQL"); 
$array_options = array('1'=> $array_opt1, '2'=> $array_opt2,'3'=> $array_opt3); 

$array_func = array('1'=> 'funct1', '2'=> 'func2','3'=> 'func3'); 

foreach ($array_options as $key => $array_opt){ 
    if (in_array($key_is, $array_opt)){ 
     call_user_func($array_func[$key], $param); 
    } 
} 

$ array_func [$ ключ] даст вам имя функции для использования. call_user_func вызовет функцию. Вы также можете указать параметр, если вам нужно. Если параметр не требуется, выйдите из параметра $ param.

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

$array_options = array('funct1'=> $array_opt1, 'funct2'=> $array_opt2,'funct3'=> $array_opt3); 

foreach ($array_options as $func_name => $array_opt){ 
    if (in_array($key_is, $array_opt)){ 
     call_user_func($func_name, $param); 
    } 
} 
Смежные вопросы