Hey Sergii,

On Wed, 1 Feb 2023 at 18:22, Sergii Shymko <ser...@shymko.net> wrote:

> Hi,
>
> After programming in PHP for two decades, my goal for 2023 is to try to
> contribute to the language.
> The plan is to start small and, if successful, work my way up increasing
> complexity of proposals.
> This topic has been chosen for starters, because IMO it strikes a good
> balance between simplicity and usefulness.
> I should be able to implement the RFC myself, unless some deep OPcache/JIT
> nuances pop up.
>
> Let me give you a brief overview of the problem and the proposed solution.
> Function array_is_list() added in PHP 8.1 introduces the concept of a
> "list" – array having 0..count-1 indexes.
> The function is awesome and array "lists" are completely compatible with
> all array_* functions!
> However, function array_filter() exhibits a nuanced behavior when
> filtering lists.
> For instance, it preserves array keys which may (or may not) create gaps
> in sequential indexes.
> These gaps mean that a filtered list is not a list anymore as validated by
> array_is_list().
>
> For example:
> $originalList = ['first', '', 'last'];
> $filteredList = array_filter($originalList);
> var_export(filteredList);  // array(0 => 'first', 2 => 'last')
> var_export(array_is_list($originalList));  // true
> var_export(array_is_list($filteredList));  // false
>
> The behavior is counterintuitive and can lead to subtle bugs, such as
> encoding issues:
> echo json_encode($originalList);  // ["first", "", "last"]
> echo json_encode($filteredList);  // {"0": "first", "2": "last"}
>
> The workaround is to post-process the filtered array with array_values()
> to reset the indexes.
> The proposal is to introduce a function array_filter_list() that would
> work solely on lists.
> It will have the same signature as array_filter() and will always return a
> valid list.
>
> See a draft RFC with more details here:
>
> https://dev.to/sshymko/php-rfc-arrayfilterlist-function-35mb-temp-slug-7074000?preview=21d6760126a02464b0511498bbb95749150afb17a7ff6377c458ee54a8f57cfe00d4e258aa06bad3232c0dd9e73a2d62138fc990048987e9e2339a3d
>
> I just registered a wiki account "sshymko" with the intention of
> submitting the RFC.
> Could someone please approve the account and give it some karma?
>
> Looking forward to collaborating with the internals team! 🙂
>
>
I don't want to shoot this down too early, but:

 1. why in the language, when a simple userland function suffices?
 2. what's wrong with writing `array_values(array_filter(...))`?

Marco Pivetta

https://twitter.com/Ocramius

https://ocramius.github.io/

Reply via email to