在使用switch case循环时,我可以使用for循环来迭代这些情况吗?

时间:2010-04-24 10:29:10

标签: php switch-statement

在PHP中,在使用switch case循环时,我可以使用for循环来迭代这些情况吗?  例如

switch .....

foreach($xyz as $abc)

{
 CASE:$abc
}

default;
  

更新

我从DB获取值,此值是表的名称,通过使用“case”我想根据表名执行特定查询。

这可能吗?

3 个答案:

答案 0 :(得分:2)

我认为您不能以这种方式在PHP switch语句中动态生成CASE声明。

你所说的是将所有表放在一个数组中,然后在switch语句中循环遍历它们以自动声明你的CASE语句。你不能做这个。

它生成:

Parse error: syntax error, unexpected T_FOREACH, expecting T_CASE or T_DEFAULT

答案 1 :(得分:1)

您可能只想将switch语句放入foreach

foreach ($tables as $table) {
    switch ($table) {
        case 'table_one' :
            // do something here
            break;
        case 'table_two' :
            // do something here
            break;
        case 'table_three' :
            // do something here
            break;
        default :
            // do some error handling here
            break;
    }
}

或者,交换机不容易阅读,请考虑远离switch并使用阵列驱动的if,尤其是如果您可以动态创建你想要做什么case

$tables = array('table_one', 'table_two', 'table_three');
if (in_array($table, $tables)) {
    // do something here
} else {
    // do some error handling here
}

即使你的数组​​有很多元素,它也更具可读性。

答案 2 :(得分:1)

编辑:根据OP的评论,我正在写这个答案

   $query=null;
    switch($tableName):
    {
    case "table1":
    $query="...";
    break;
    case "table2":
    $query="...";
    break;
    case "table3":
    $query="...";
    break;
    }
    ....

here goes  logic to  execute that query

如果你有太多的表,那么把这些查询放在数组检查中,就像这样,

$arr = array("table1"=>"query1","table2"=>"query2","table3"=>"query3",....);
$query  = $arr[$tableName];

这里是执行查询的逻辑