Re: When is "z" != "z" ?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



At 12:27 PM -0700 6/4/06, Rasmus Lerdorf wrote:
>tedd wrote:
>>But, what brothers me about the routine, is that is DOES print "z" where it is supposed to. In other words, the characters a-z are output before continuing with aa and so on. The operation doesn't end with "z".
>
>Your condition for the loop to continue is $i<="z".
>
>[1] When $i = "y" it will obviously continue because "y" < "z"
>[2] When $i = "z" it will obviously continue because "z" = "z"
>[3] When $i = "aa" it will obviously continue because "aa" < "z"

I agree with [1] and [2], but [3] is where we part company. You see, if you are right, then "aaa" would also be less than "z", but that doesn't appear so.

>It doesn't stop until you get to "z"+something.  As in "za" because at that point "za" > "z" so the last thing you see is the one before "za" which would be "yz".

See above -- plus, I would expect that in evaluating a character, that character(s) would not enter the mix. If I was to evaluate a single digit, it would seem odd if double digits were allowed in that evaluation.

>>Here's another way to look at it. All characters before "z" are less than "z" -- correct? So, what value are all characters after "z" (i.e., "aa-yz")? They cannot be greater than, nor can they be less than. So, what are they?
>
>But you are not comparing things in the same context here.  Strings are naturally compared alphabetically while you are thinking they are compared numerically somehow.  Think of sorting a set of words.  Would you expect "aa" to sort before or after "z" ?


Not meaning to infer that you don't know this, because I know you do -- so I must be confused.

Yes, it is my contention that strings are numerical -- you don't store "A" in memory, you store 0100 001, or ASCII DEC 65.

Likewise "a" is DEC 97 (0110 0001) and "z" is DEC 122 (0111 1010) and if I compare "a" to "z" , it will always be less by numeric definition.

However, if I compare "aa" with "z", then what? Is the numerical translation of the strings --

0110 0001 0110 0001 < 0111 1010

equal to TRUE -- I don't think so.

Likewise, is the string "aaa"" greater than "z" -- yep, I can buy that. But, if you hold that "aa" is less than "z", then everything must be less than "z" (except z stuff). So, the loop would continue until you hit the maximum allowable for strings -- that doesn't sound good.

I can't see the logic that says "aa" is less than "z" while "aaa" is greater. That sounds like something our government would dream up.

>So yes, like I said, it is a bit of a quirk, but there is no good answer to what "z"++ should be and we certainly don't want to change the default comparison mechanism to not compare strings alphabetically because that would screw up all sorts of stuff including usorts and peoples' expectations.  It's just in this case where you have gotten it into your head that incrementing strings is a good thing to do.

Oh, I'm not saying to change anything. I've seen and worked with worse.

>You'd be much better off with a range call to quickly generate a range of characters.  You could then loop through that character by character.  Or use the chr() function to work with character codes instead.

I figured a way around it, I just thought it was odd.

Thanks for your insight.

tedd
-- 
------------------------------------------------------------------------------------
http://sperling.com  http://ancientstones.com  http://earthstones.com

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


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux