> To solve this, I propose adding an ARRAY_UNIQUE_IDENTICAL option that
> can be passed to array_uniques $flags which uses identical operator
> (===) semantics. Internally it uses a new hashmap that allows using
> arbitrary PHP values as keys to efficiently remove duplicates. This is
> slightly over-engineered for this use case. However, this data
> structure will be required for implementing ADTs to deduplicate
> instances with the same values. This hashmap is a heavily minimized
> version of the teds extensions StrictHashMap [1].

As a regular developer, I look from the usage side, not from the
implementation side.
>From such perspective, remembering that filtering unique enums
requires this exact flag
is somewhat "dirty": on the surface, nothing tells that enums are
non-comparable.

You will have to memorize yet another PHP quirk, or be able to build a
logical chain:
- enums are non-comparable by default
- enums have no default string value (if not baked by a string)
- array_unique internally sorts an array
- default flag for array_unique compares the string representations of its items
- thus it won't work for enums in a general case

This requires deeper knowledge of PHP, which is for sure a valuable
skill, but not as wide-spread
as we would like to. Most of the devs will first try to use
array_unique() with the default flag, perhaps
not even knowing about flags existence. Each usage of such a flag will
not reveal intent by itself
and at least will require a comment for readable codebases.

Perhaps an alternative idea is to provide a default string value for
enums which are not baked,
Nikolas had already brought up this idea earlier.

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php

Reply via email to