[12.x] Add uniqueStrings() method to collections #57517
Closed
+209
−0
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Adds
uniqueStrings()method toCollectionandLazyCollectionfor optimized string deduplication.Provides 5-245x performance improvement over
unique()by usingarray_unique(SORT_STRING)andisset()hash lookups. Supports keys, closures, and nested properties.Also avoids
SORT_REGULARinstability: php/php-src#20262Benchmark
Small datasets (10 items): 1-5x faster
Large datasets (10K items): 21-38x faster (up to 293x vs uniqueStrict!)
Benchmark results: https://gist.github.com/jmarble/e4bcecb63e021d48c8246dde1400ad3c
Benchmark source code: https://gist.github.com/jmarble/57746453e7a1e9cbf77c8bc2812e5e1c