Robin Burchell wrote: > On Thu, Feb 26, 2009 at 5:21 PM, Moriyoshi Koizumi <m...@mozo.jp> wrote: >> So, in what point do you guys think of this change as valid? >> >> Moriyoshi > > Is there any known examples of code broken by this, or is it a more > academic than practical problem? > > <snip>
That's indeed a practical problem. 1. array_unique() has never been supposed to handle values other than strings. That's how bug #10658 is handled. 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