At 10:38 AM 6/4/2006, tedd wrote:
for ($i="a"; $i<"z"; $i++)
  {
  echo($i);
   }

-- it stops at "y"

But, if you use --

for ($i="a"; $i<="z"; $i++)
  {
  echo($i);
   }

-- it prints considerably more characters after "z" than what one would normally expect -- why is that?



Tedd,

The discussion of PHP strings has been interesting; thanks for sparking that.

Of course, your subject line to the contrary, it's not that "z" != "z", it's that storing an alphabetic character assumed to be a single byte in a variable and then incrementing it can result in a two-byte result. I find it plausible that the statement $a = "a" produces a two-byte result in the first place, we just don't notice it because the second byte is turned sideways and is very, very skinny.

I assume you know (but I'll state it anyway for the record) that to avoid the problems you've encountered by trying to treat apparently multi-byte PHP string variables like one-byte numerics, you can simply use numerics themselves:

        for ($i = ord("a"); $i <= ord("z"); $i++)
        {
                echo chr($i);
        }

ord() and chr() being the PHP functions to yield the numeric value of a character and the ASCII character of a numeric value:
http://php.net/ord & http://php.net/chr

To save that hard-working server a few machine cycles, one would presumably store ord("z") in a variable before the loop began and test for that each iteration.

Warm regards,
Paul
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to