Re: array key's: which is correct?

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

 



On Tue, 2010-06-08 at 17:11 +0200, Peter Lind wrote:

> On 8 June 2010 16:53, Ashley Sheridan <ash@xxxxxxxxxxxxxxxxxxxx> wrote:
> >
> > On Tue, 2010-06-08 at 16:44 +0200, Peter Lind wrote:
> >
> > On 8 June 2010 16:38, Ashley Sheridan <ash@xxxxxxxxxxxxxxxxxxxx> 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.dk
> 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



[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