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