Re: array key's: which is correct?

From: Date: Tue, 08 Jun 2010 15:54:14 +0000
Subject: Re: array key's: which is correct?
References: 1 2 3 4 5  Groups: php.general 
Request: Send a blank email to php-general+get-305965@lists.php.net to get a copy of this message
On Tue, Jun 08, 2010 at 04:44:53PM +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 :) Umm, yes, you are correct. I pasted Rob's code into a test file, added some other print_r()s and such, just to look at the whole issue. I'm *still* examining the results, trying to wrap my wits around why things are done this way. Paul -- Paul M. Foster

« previous php.general (#305965) next »