From: Paul M Foster on
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
From: Ashley Sheridan on
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.

Thanks,
Ash
http://www.ashleysheridan.co.uk


From: Peter Lind on
On 8 June 2010 16:38, Ashley Sheridan <ash(a)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

--
<hype>
WWW: http://plphp.dk / http://plind.dk
LinkedIn: http://www.linkedin.com/in/plind
BeWelcome/Couchsurfing: Fake51
Twitter: http://twitter.com/kafe15
</hype>
From: Ashley Sheridan on
On Tue, 2010-06-08 at 16:44 +0200, Peter Lind wrote:

> On 8 June 2010 16:38, Ashley Sheridan <ash(a)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.

Thanks,
Ash
http://www.ashleysheridan.co.uk


From: Peter Lind on
On 8 June 2010 16:53, Ashley Sheridan <ash(a)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(a)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.dk
LinkedIn: http://www.linkedin.com/in/plind
BeWelcome/Couchsurfing: Fake51
Twitter: http://twitter.com/kafe15
</hype>
First  |  Prev  |  Next  |  Last
Pages: 1 2 3
Prev: Blowfish Encryption
Next: Pagination?