筛选许多选项


Filter for many option

输入变量:

$var_in="PDF Is from Adobe Acrobat";

我将首先strsub() 3并且只得到"PDF"

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

我有一些主选项,如果从$key_is

找到

1。选项一:

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

将运行somefunction1()

2。选择两个

"PNG", "BMP", "JPG"

somefunction2运行()

3。选择三个

"DAT", "BAC", "SQL"

somefunction3运行()

旧方法是使用

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

如何使它简单(也许是一些功能)?如果我从主选项添加新项目它会自动转到
功能选项选择。

像这样,如果我在主选项

中添加"GIF"
"PNG", "BMP", "JPG", "GIF"

将运行runfunction1()不需要更改开关

Using switch and 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;
        }
    }

您可以设置$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();
        }

您可以尝试将每个选项类别插入到类别数组中。所以你可以输入

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

然后传递一个数组给被调用的函数,例如

handleCategory($categoryArray)

然后检查数组的第一个索引来决定应该运行哪个函数

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

你可以创建一个智能数组

$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[$key]将给出要使用的函数的名称。Call_user_func将调用该函数。如果需要,还可以传递一个参数。如果不需要任何参数,则省略$param。

编辑:如果每个选项的函数名是唯一的,你甚至可以使用函数名作为键:

$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); 
   }
}