Re: array key's: which is correct?
| From: | Ashley Sheridan | Date: | Tue, 08 Jun 2010 15:12:43 +0000 |
| Subject: | Re: array key's: which is correct? | ||
| References: | 1 2 3 4 5 6 7 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-305964@lists.php.net to get a copy of this message | ||
On Tue, 2010-06-08 at 17:11 +0200, Peter Lind wrote:
> On 8 June 2010 16:53, Ashley Sheridan <ash@ashleysheridan.co.uk> wrote:
> >
> > On Tue, 2010-06-08 at 16:44 +0200, Peter Lind wrote:
> >
> > On 8 June 2010 16:38, Ashley Sheridan <ash@ashleysheridan.co.uk> wrote:
> > > On Tue, 2010-06-08 at 10:35 -0400, Paul M Foster wrote:
> > >
> > >> On Tue, Jun 08, 2010 at 09:38:58AM -0400, Robert Cummings wrote:
> > >>
> > >> > Tanel Tammik wrote:
> > >> >> Hi,
> > >> >>
> > >> >> which one is correct or "better"?
> > >> >>
> > >> >> $array[3] = '';
> > >> >> or
> > >> >> $array['3'] = '';
> > >> >>
> > >> >> $i = 7;
> > >> >>
> > >> >> $array[$i] = '';
> > >> >> or
> > >> >> $array["$i"] = '';
> > >> >
> > >> > Sometimes it is good to illustrate the correct answer:
> > >> >
> > >> > <?php
> > >> >
> > >> > $array = array
> > >> > (
> > >> > '1' => '1',
> > >> > '2' => '2',
> > >> > 'three' => 'three',
> > >> > '4.0' => '4.0',
> > >> > 5.0 => 5.0,
> > >> > );
> > >> >
> > >> > var_dump( array_keys( $array ) );
> > >> >
> > >> > ?>
> > >> >
> > >> > The answer is surprising (well, not really :) and certainly advocates
> > >> > against making literal strings of integers or manually converting a
> > >> > string integer to a real integer or using floating point keys.
> > >>
> > >> Curse you, Rob Cummings! ;-}
> > >>
> > >> I was stunned at the results of this. I assumed that integers cast as
> > >> strings would remain strings as indexes. Not so. And then float indexes
> > >> cast to ints. Argh!
> > >>
> > >> My advice to the original poster was slightly incorrect. But I would
> > >> still encourage you to avoid enclosing variables in double-quotes
> > >> unnecessarily. (And integers in single-quotes for that matter.)
> > >>
> > >> Paul
> > >>
> > >> --
> > >> Paul M. Foster
> > >>
> > >
> > >
> > > The obvious way around this would be to include some sort of character
> > > in the index that can't be cast to an integer, so instead of $array[1.0]
> > > which would equate to $array[1] maybe add an underscore to make it
> > > $array['_1.0']. It's not the prettiest of solutions, but it does mean
> > > that indexes are kept as you intended, and you need only strip out the
> > > first character, although I imagine a lot of string manipulation on a
> > > large array would decrease performance.
> >
> > Floats in quotes are not cast to int when used as array keys. Just an FYI :)
> >
> > Regards
> > Peter
> >
> >
> > They are. Go look at Robs earlier example. Even building upon that to make a float value
> > where it doesn't equate to an integer, it is still cast as an integer unless it's inside a
> > string:
> >
> > $array = array
> > (
> > '1' => '1',
> > '2' => '2',
> > 'three' => 'three',
> > '4.0' => '4.0',
> > 5.0 => 5.0,
> > 6.5 => 6.5,
> > );
> >
> > var_dump( array_keys( $array ) );
> >
> > That's Robs code, but I added in the last element to show how a float index is
> > converted to an integer. Putting the float value inside a string solves the issue.
> >
>
> Did you read what I wrote?
>
> > ***Floats in quotes*** are not cast to int when used as array keys. Just an FYI :)
>
> I tested Robs example, that's how I know that floats in quotes are not
> converted to ints, whether or not you use '4.0' or '6.5'
>
> Regards
> Peter
>
> --
> <hype>
> WWW: http://plphp.dk / http://plind.dkP µ+Ô/¬çñ
> Ѝ¶&Œ
> LinkedIn: http://www.linkedin.com/in/plind
> BeWelcome/Couchsurfing: Fake51
> Twitter: http://twitter.com/kafe15
> </hype>
Sorry, my bad, I misread your email, you were right!
Thanks,
Ash
http://www.ashleysheridan.co.uk