* 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