Hi internals, https://wiki.php.net/rfc/iterator_xyz_accept_array recently passed in php 8.2, fixing a common inconvenience of those functions throwing a TypeError for arrays.
However, from the `iterator_` name (https://www.php.net/manual/en/class.iterator.php), it's likely to become a source of confusion when writing or reviewing code decades from now, when the name suggests it only accepts objects (Traversable Iterator/IteratorAggregate). I'm planning on creating an RFC adding the following functions to the `iterable\` namespace as aliases of iterator_count/iterator_to_array. Those accept iterables (https://www.php.net/manual/en/language.types.iterable.php), i.e. both Traversable objects and arrays. Namespaces were chosen after feedback on my previous RFC, and I believe `iterable\` follows the guidance from https://wiki.php.net/rfc/namespaces_in_bundled_extensions and https://wiki.php.net/rfc/namespaces_in_bundled_extensions#core_standard_spl I plan to create an RFC with the following functionality in the iterable\ namespace, and wanted to see what the preference on naming was, or if there was other feedback. (Not having enough functionality and wanting a better idea of the overall - `iterable\count(...)` (alias of iterator_count) - `iterable\to_array(Traversable $iterator, bool $preserve_keys = true): array` (alias of iterator_to_array, so that users can stop using a misleading name) - `iterable\any(iterable $input, ?callable $callback = null): bool` - Determines whether any value of the iterable satisfies the predicate. and all() - Determines whether all values of the iterable satisfies the predicate. This is a different namespace from https://wiki.php.net/rfc/any_all_on_iterable - `iterable\none(iterable $input, ?callable $callback = null): bool` returns the opposite of any() - `iterable\find(iterable $iterable, callable $callback, mixed $default = null): mixed` Returns the first value for which $callback($value) is truthy. On failure, returns default - `iterable\fold(iterable $iterable, callable $callback, mixed $initial): mixed` `fold` and requiring an initial value seems like better practice. See https://externals.io/message/112558#112834 and https://stackoverflow.com/questions/25149359/difference-between-reduce-and-fold - `iterable\unique_values(iterable $iterable): array {}` Returns true if this iterable includes a value identical to $value (`===`). - `iterable\includes_value(iterable $iterable, mixed $value): bool {}` Returns a list of unique values of $iterable There's other functionality that I was less certain about proposing, such as `iterable\keys(iterable $iterable): array`, which would work similarly to array_keys but also work on Traversables (e.g. to be used with userland/internal collections, generators, etc.) Or functions to get the iterable\first()/last() value in an iterable. Any thoughts on those? I also wanted to know if more verbose names such as find_value(), fold_values(), any_values(), all_values() were generally preferred before proposing this, since I only had feedback from a small number of names. My assumption was short names were generally preferred when possible. See https://github.com/TysonAndre/pecl-teds/blob/main/teds.stub.php for documentation of the other functions mentioned here. The functionality can be tried out by installing https://pecl.php.net/package/teds Background ----------- In February 2021, I proposed expanded iterable functionality and brought it to a vote, https://wiki.php.net/rfc/any_all_on_iterable , where feedback was mainly about being too small in scope and the choice of naming. Later, after https://externals.io/message/112558#112780 , https://wiki.php.net/rfc/namespaces_in_bundled_extensions#proposal was created and brought to a vote in April 2021 that passed, offering useful recommendations on how to standardize namespaces in future proposals of new categories of functionality (e.g. `iterable\any()` and `iterable\all()`) Any comments? Thanks, Tyson -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: https://www.php.net/unsub.php