Am 30-May-2023 18:34:19 +0200 schrieb andr...@dqxtech.net: > On Tue, 30 May 2023 at 18:27, Boro Sitnikovski <buritom...@gmail.com> wrote: > > > > 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 > > All of the examples I looked at are asking for the first kind of > grouping, that can be implemented as in your first example. > In all the examples, if two items are equal, they end up in the same group. > > In your proposed behavior, equal items can end up in distinct groups > depending on their original position in the source array. > I don't see any questions or examples that ask for this. > > -- Andreas >
I regulary have the need for a grouping function, too. But as Andreas already said: only for the first kind of grouping: $array = [ [ 'id' => 1, 'type' => 'foo' ], [ 'id' => 2, 'type' => 'foo' ], [ 'id' => 3, 'type' => 'baz' ], ]; $groups = array_group(fn ($item) => $item['type']); echo json_encode( $groups ); { "foo":[ {"id":1,"type":"foo"}, {"id":2,"type":"foo"} ], "baz":[ {"id":3,"type":"baz"} ] } This behaviour would be inline with Javascript's `Array.prototype.group()` function [1] and other frontend libs [2][3]. I think the proposed solution is a more unlikely need. At least I never needed this kind of "grouping". [1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/group [2]: https://underscorejs.org/#groupBy [3]: https://lodash.com/docs/4.17.15#groupBy Best regards Christian > > > > > 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 ); > > >>>> ``` > -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: https://www.php.net/unsub.php