Hi, Thank you for your thoughts.
> I would say the more common desired behavior is the one in your first > example. And even for that we don't have a native function. This Google search might give more insight into the number of discussions about a grouping functionality: https://www.google.com/search?q=php+group+elements+site:stackoverflow.com > Your behavior can be implemented in userland like so: > https://3v4l.org/epvHm Correct, but then again, we can also implement `array_map`/`array_filter`/etc. in userland :) > I think you need to make a case as to why the behavior you describe > justifies a native function. Similar to my previous answer, but also in general - ease of access and also performance. > E.g. if you find a lot of public php code that does this kind of grouping. > > I personally suspect it is not that common. > > Cheers > Andreas > > > On Tue, 30 May 2023 at 17:08, Boro Sitnikovski <buritom...@gmail.com> wrote: >> >> Hey, >> >> Thanks for the suggestion. >> >> For the previous case in the code, I added these in a Gist to not clutter >> here too much: >> >> 1. The first example corresponds to >> https://gist.github.com/bor0/b5f449bfe85440d96abd933b9f03b310#file-test_manual_group-php >> 2. The second example corresponds to >> https://gist.github.com/bor0/b5f449bfe85440d96abd933b9f03b310#file-test_array_group-php >> 3. Another example, addressing the problem of increasing subsequences is >> very simple with `array_group`: >> https://gist.github.com/bor0/b5f449bfe85440d96abd933b9f03b310#file-test_array_incr_subseqs-php >> >> Best, >> >> Boro >> >>> On 30.5.2023, at 16:57, Andreas Hennings <andr...@dqxtech.net> wrote: >>> >>> Hello Boro, >>> I think you should include the "expected result" in your code examples. >>> Maybe this is in your patch file, but I don't think we want to look at >>> that for discussion. >>> >>> Cheers >>> Andreas >>> >>> On Tue, 30 May 2023 at 13:35, Boro Sitnikovski <buritom...@gmail.com> wrote: >>>> >>>> Hello all, >>>> >>>> As per the How To Create an RFC instructions, I am sending this e-mail in >>>> order to get your feedback on my proposal. >>>> >>>> I propose introducing a function to PHP core named `array_group`. This >>>> function takes an array and a function and returns an array that contains >>>> arrays - groups of consecutive elements. This is very similar to Haskell's >>>> `groupBy` function. >>>> >>>> For some background as to why - usually, when people want to do grouping >>>> in PHP, they use hash maps, so something like: >>>> >>>> ``` >>>> <?php >>>> $array = [ >>>> [ 'id' => 1, 'value' => 'foo' ], >>>> [ 'id' => 1, 'value' => 'bar' ], >>>> [ 'id' => 2, 'value' => 'baz' ], >>>> ]; >>>> >>>> $groups = []; >>>> foreach ( $array as $element ) { >>>> $groups[ $element['id'] ][] = $element; >>>> } >>>> >>>> var_dump( $groups ); >>>> ``` >>>> >>>> This can now be achieved as follows (not preserving keys): >>>> >>>> ``` >>>> <?php >>>> $array = [ >>>> [ 'id' => 1, 'value' => 'foo' ], >>>> [ 'id' => 1, 'value' => 'bar' ], >>>> [ 'id' => 2, 'value' => 'baz' ], >>>> ]; >>>> >>>> $groups = array_group( $array, function( $a, $b ) { >>>> return $a['id'] == $b['id']; >>>> } ); >>>> ``` >>>> >>>> The disadvantage of the first approach is that we are only limited to >>>> using equality check, and we cannot group by, say, `<` or other functions. >>>> Similarly, the advantage of the first approach is that the keys are >>>> preserved, and elements needn't be consecutive. >>>> >>>> In any case, I think a utility function such as `array_group` will be >>>> widely useful. >>>> >>>> Please find attached a patch with a proposed implementation. Curious about >>>> your feedback. >>>> >>>> Best, >>>> >>>> Boro Sitnikovski >>>> >> -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: https://www.php.net/unsub.php