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

Reply via email to