On Fri, Feb 27, 2009 at 3:58 AM, Moriyoshi Koizumi <m...@mozo.jp> wrote: > 1. array_unique() has never been supposed to handle values other than > strings. That's how bug #10658 is handled.
That's not what I really wanted to mean. I should have said "not supposed to handle values other than scalars". Moriyoshi > http://bugs.php.net/10658 > > See also: > http://cvs.php.net/viewvc.cgi/phpdoc/en/reference/array/functions/array-unique.xml?revision=1.16&view=markup > > 2. the results are inconsistent between SORT_STRING and SORT_REGULAR > when the items are a mixture of different types. > > <?php > $objs = array( > "0x10", > 16, > true, > "true", > ); > > var_dump(array_unique($objs, SORT_REGULAR)); > var_dump(array_unique($objs, SORT_STRING)); > > $objs = array( > "0x10", > true, > 16, > "true", > ); > > var_dump(array_unique($objs, SORT_REGULAR)); > var_dump(array_unique($objs, SORT_STRING)); > ?> > > I could hardly imagine what would show up. Do you? > > array(1) { > [0]=> > string(4) "0x10" > } > array(4) { > [0]=> > string(4) "0x10" > [1]=> > int(16) > [2]=> > bool(true) > [3]=> > string(4) "true" > } > array(2) { > [0]=> > string(4) "0x10" > [3]=> > string(4) "true" > } > array(4) { > [0]=> > string(4) "0x10" > [1]=> > bool(true) > [2]=> > int(16) > [3]=> > string(4) "true" > } > > > 3. the result can be unreasonable even with SORT_REGULAR > > As the equality of the object is only determined by member-wise > comparison, there must be cases where the behavior is not acceptable: > > <?php > class Foo { > public $a; > function __construct($a) { > $this->a = $a; > } > }; > > > $objs = array( > new Foo(1), new Foo("2e0"), new Foo(2), new Foo(3) > ); > > var_dump(array_unique($objs, SORT_REGULAR)); > ?> > > This yields: > > array(3) { > [0]=> > object(Foo)#1 (1) { > ["a"]=> > int(1) > } > [1]=> > object(Foo)#2 (1) { > ["a"]=> > string(3) "2e0" > } > [3]=> > object(Foo)#4 (1) { > ["a"]=> > int(3) > } > } > > while the second item is semantically not expected to be equal to the third. > > > Moriyoshi > > -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php