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