Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP switch statement inside another switch statement

I have this situation where I have to check two GET variables. After checking the first one in one switch statement inside the statement, the second variable has to be checked in the second switch statement inside the first one case loop.

I can't post the exact code here, but here is an example:

<?php
    error_reporting(E_ALL);
    ini_set('display_errors', '1');

    switch($_GET['parent']){
        case 'child1':
            if(!isset($_GET['child'])){
                echo "Only parent";
            }
            else{
                switch($_GET['child']){
                    case 'test':
                        echo 'test';
                        break;
                }
            }
            break;

        case 'child2':
            echo 'child2';
            break;

        default:
            echo $_GET['parent'];
    }
?>

It's working fine with this code example, but when I actually use this procedure on my server, the control get skipped to default at parent switch statement even though it has a matching case value.

No error is reported, and I couldn't debug more than to this level.

I know you want to see the code, but I cannot post it here. At least you can guide me debug more.

like image 847
pahnin Avatar asked Feb 19 '12 21:02

pahnin


People also ask

Can you put a switch statement inside a switch statement?

It is possible to have a switch as part of the statement sequence of an outer switch. Even if the case constants of the inner and outer switch contain common values, no conflicts will arise.

Can you nest switch statements PHP?

To conclude, nested switch statements are possible and the way you used them in your code sample is correct.

How do you use a switch-case in a switch-case?

Points to remember while using Switch Case When the variable being switched on is equal to a case, the statements following that case will execute until a break statement is reached. When a break statement is reached, the switch terminates, and the flow of control jumps to the next line following the switch statement.

Can we use switch inside if?

Yes you can call switch in if . you can not define a function inside another function.


2 Answers

According to the PHP Documentation Examples, it is possible if the case block which contains the nested switch is enclose with braces.

Follows the mentioned example.

<?php 
    switch ($argc) { 
        case 'home': { 
             print('This is $argc, home case.'); 
            break; 
        } 
        case 'subsection': { 
                switch ($argd) { 
                     case 'links': { 
                            switch($arge) { 
                                case 'display': { 
                                print('This is $arge, subsection,links,display case.'); 
                                break; 
                                } 
                           } 
                    } 
                } 
        } 
    } 
?>
like image 95
Nereare Avatar answered Sep 30 '22 17:09

Nereare


I can't see any error in your code. I tried it on my machine and it works fine. As it also works fine for you, the error most be somewhere else.

There's no reason why nested switch statements shouldn't be possible, as switch statements are defined as follows:

switch($variable) {
  case "case1":
    [statement]
    break;
}

[statement] can be replaced by a simple command, such as echo "test";, a series of commands echo "test"; echo "test"; or another switch statement. Adding braces doesn't change anything, as these merely serve to group a series of commands - so that more than one command can be used for the then part in conditionals like if([condition]) [then]. The above answer, which surprisingly has 18 upvotes for wrongly advising you to add braces, doesn't change anything.

To conclude, nested switch statements are possible and the way you used them in your code sample is correct. The error is somewhere else.

like image 4
Alexander Jank Avatar answered Sep 30 '22 15:09

Alexander Jank