It seems like you can do something like this: switch ($foo) { case 'a': if (do_a()) echo "a was done"; else print_menu(); // changes here break;
case 'b': if (do_b()) echo "b was done"; else print_menu(); // changes here break; case 'menu': print_menu(); break; case 'logout': do_logout(); break; } Or, if for some reason you can't do that (or you don't want to)... Here's another way: (I'm not sure if this will work.) switch ($foo) { case 'a': if (do_a()) echo "a was done"; else $foo='menu'; case 'menu': print_menu(); break; case 'b': if (do_b()) echo "b was done"; else $foo='menu'; case 'menu': print_menu(); break; case 'logout': do_logout(); break; } It doesn't look "clean" but it might just work... BTW, I know this is just an example, but I expect you're doing your if(){ } else { } properly in your real code... - E > >Regardless of how many break statements you take away (even >if only 1), case statements appear to be ignored after the >first match is made. I need a way to make the switch statement >continue evaluating case-matches, even after the first case >match is made. Further, it should allow one case segment to >alter the switch variable and have such alteration taken >into account for subsequent matches. > >Here's a more illustrative example of my situation: > >switch ($foo) { > case 'a': > if (do_a()) echo "a was done"; > else $foo='menu'; > break; > > case 'b': > if (do_b()) echo "b was done"; > else $foo='menu'; > break; > > case 'menu': > print_menu(); > break; > > case 'logout': > do_logout(); > break; >} > >that code will not print_menu if do_a fails, since >it exits the switch statement upon seeing a break. > >if I remove the break after do_a, it will execute >do_a and do_b -- bad. what we really want is for it >to execute do_a and if do_a returns false, print_menu. > >Joe > >--- "@ Edwin" <[EMAIL PROTECTED]> wrote: > > Well, you don't have to take away all the "break;". :) > > > > For example, only here: > > > > > switch ($foo) { > > > case 'step2': > > > do_step2(); > > > if ($error) $foo='step1'; //repeat step1 > > > break; > > > > - E > > > > > > > > > > >If you don't break, it continues to execute all the code until > > >the end of the switch, ignoring any subsequent case > > >statements. > > > > > >In my example, eliminating the break after step2 would > > >cause execution of do_step1(), but also do_something_else(), > > >which is not desired. > > > > > >--- "@ Edwin" <[EMAIL PROTECTED]> wrote: > > > > Actually, you can--just don't "break;". > > > > > > > > Try it. > > > > > > > > - E > > > > > > > > > > > > > >I'd like to be able to modify the switch variable inside a case > > > > >statement, like this: > > > > > > > > > >switch ($foo) { > > > > > case 'step2': > > > > > do_step2(); > > > > > if ($error) $foo='step1'; //repeat step1 > > > > > break; > > > > > > > > > > case 'step1': > > > > > do_step1(); > > > > > break; > > > > > > > > > > case 'a_third_thing': > > > > > do_something_else(); > > > > > break; > > > > >} > > > > > > > > > >Can you modify the variable ($foo) inside a case statement and > > > > >have it evaluated for subsequent 'case's like this? If not, I > > > > >will have to revert to a series of if statements, in which this can > > > > >be done: > > > > > > > > > >if ($foo=='step2') { > > > > > do_step2(); > > > > > if ($error) $foo='step1'; > > > > >} > > > > >if ($foo=='step1') { > > > > > do_step1(); > > > > >} > > > > >etc. > > > > > > > > > >Switch-case seems cleaner, and I'd prefer to stick with it. > > > > > > > > > >__________________________________________________ > > > > >Do You Yahoo!? > > > > >Yahoo! Finance - Get real-time stock quotes > > > > >http://finance.yahoo.com > > > > > > > > > >-- > > > > >PHP General Mailing List (http://www.php.net/) > > > > >To unsubscribe, visit: http://www.php.net/unsub.php > > > > > > > > > > > > > > > > > > > > > > > > > _________________________________________________________________ > > > > >$B!#!V!&%%!#!V!#%r!#!V!#!V!&%F!#!V!&%R!&%f|\(B$B!&%^!#%r!#!V!#%r(B$B!&%"!#%r!&%X!&%a(B$B!&%&!&!&(B MSN $B!#%r!&j#%rl)(B$B!&%F!#%r!&%9!#!W!&%-(B > > http://character.msn.co.jp/ > > > > > > > > > > > > -- > > > > PHP General Mailing List (http://www.php.net/) > > > > To unsubscribe, visit: http://www.php.net/unsub.php > > > > > > > > > > > > >__________________________________________________ > > >Do You Yahoo!? > > >Yahoo! Finance - Get real-time stock quotes > > >http://finance.yahoo.com > > > > > >-- > > >PHP General Mailing List (http://www.php.net/) > > >To unsubscribe, visit: http://www.php.net/unsub.php > > > > > > > > > > _________________________________________________________________ > > >$B%$(B$B%_%^%=!"%^%U%*%[%A!#%r%9%7%7%D!"%-!"%=%9%_%N%O!&!V!&!"!&%K!&`&%O!"!&(BMSN > $B!&%'!#%7!&%C!&%-!&n'!&(B> > http://auction.msn.co.jp/ > > > > > > -- > > PHP General Mailing List (http://www.php.net/) > > To unsubscribe, visit: http://www.php.net/unsub.php > > > > >__________________________________________________ >Do You Yahoo!? >Yahoo! Finance - Get real-time stock quotes >http://finance.yahoo.com _________________________________________________________________ $B%O%$%;%s%9$J>&IJ$r5$7Z$K9XF~(B MSN $B%7%g%C%T%s%0(B http://shopping.msn.co.jp/ -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php