Re: When is "z" != "z" ?
| From: | tedd | Date: | Sun, 04 Jun 2006 20:04:28 +0000 |
| Subject: | Re: When is "z" != "z" ? | ||
| References: | 1 2 3 4 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-237373@lists.php.net to get a copy of this message | ||
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