|
Posted by Tim Boring on 01/20/05 23:19
On Thu, 2005-01-20 at 15:13, Michael Sims wrote:
> Tim Boring wrote:
> > On Thu, 2005-01-20 at 13:41, Jason Wong wrote:
> >> I suspect what you want to be doing is something like this:
> >>
> >> switch (TRUE) {
> >> case ANY_EXPRESSION_THAT_EVALUATES_TO_TRUE:
> >> ...
> >> }
> >
> > Thanks for the suggestion, but I'm not sure that does what I'm looking
> > for. I really think the problem is with my regex, not necessarily
> > with the way I've constructed my switch statement.
>
> No, Jason is right. Your problem IS in the switch statement. You cannot use it the
> way you are trying to and get the results you're expecting. Each case expression is
> evaluated with the switch expression just as if you compared them with the "=="
> operator. In your case, you're comparing the return value of preg_match() against
> the $line string. This isn't what you want.
>
> Here's what happens. Say your $line contains the string "AKRN". Your regex pattern
> matches only if the line begins with a non-word character. "A" is definitely a word
> character, so the pattern does not match. preg_match returns an integer indicating
> the number of matches, which in this case is 0.
>
> To evaluate your case, PHP does the equivalent of:
>
> if ("AKRN..." == 0)
>
> which is actually TRUE. From:
>
> http://www.php.net/manual/en/language.types.string.php#language.types.string.convers
> ion
>
> "If the string starts with valid numeric data, this will be the value used.
> Otherwise, the value will be 0 (zero)."
>
> Since "AKRN" doesn't begin with valid numeric data, it is converted to 0 for the
> purposes of the comparison. Since 0 == 0 the case comparison evaluates to true.
>
> When you switch it to begin with a number, PHP now uses that number. Say you switch
> it to "1AKRN". PHP then will compare 1 == 0 which is false.
>
> To accomplish what you want you'll have to change it to:
>
> switch (true) {
> case ($total_counter <= 5):
> ...
> case (preg_match(...):
> ...
>
> etc. as Jason suggested. Why don't you try it and see if it works?
>
> HTH
I tried it and it worked as Jason explained. Sorry, I'm a little
slow at times. Thanks for taking the time and effort to explain
this in more detail!
Tim
Navigation:
[Reply to this message]
|