* Thus wrote Michael Sims:
> Thomas Goyne wrote:
> > On Thu, 17 Jun 2004 16:52:32 -0500, Michael Sims
> > <[EMAIL PROTECTED]> wrote:
> >> ceil() returns a variable of type double.  In the above script I
> >> expected $foo to become an empty array after calling unset().  But
> 
> > However,
> > array indexes  are type specific, so $a[2] != $a['2'].
> 
> That's incorrect (at least with PHP 4.3.7).  PHP will happily cast your array index
> and compare it without regard to type in some cases, as a simple test illustrates:
> 
> <quote>
> $a[2] = 1;
> if ($a[2] == $a['2']) {
>   print "Arrays indexes are not type specific, at least not in all cases.\n";
> }
> 
> if ($a[2] == $a[(double) 2]) {
>   print "Integers and doubles compare, even when using '=='.\n";
> }
> 

To simplify things:

  $a[2] = '1';
  $k = (double)2;
  echo isset($a[$k]);
  unset($a[$k]);
  echo isset($a[$k]);
  echo " -> expect 1\n";


Result:
  11 -> expect 1



> 
> It's the behavior that is specific to unset() that I'm puzzled about.
> 

The problem is, array hash's and indexes must be either integer or
string as noted in the manual, so technically it really isn't a bug
even though it appears to behave like one.

I would have to agree that there does seem to be inconsistencies
between isset and unset, So perhaps mabey submiting a Feature
Request showing how close php seems to supporting (floats) as indexes.

You're alternative would be to cast your double to a int or string:

  $k = (int)(double)2;

or to make the above not look too silly:

  $k = (int) ceil(3/4);


HTH,

Curt
-- 
First, let me assure you that this is not one of those shady pyramid schemes
you've been hearing about.  No, sir.  Our model is the trapezoid!

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to