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&#58759;$B!&%^!#%r!#!V!#%r(B&#57822;$B!&%"!#%r!&%X!&%a(B&#63730;$B!&%&!&!&(B
MSN $B!#%r!&j#%rl)(B&#57822;$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&#57643;&#58792;$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

Reply via email to