Am 30-May-2023 18:34:19 +0200 schrieb [email protected]:
> On Tue, 30 May 2023 at 18:27, Boro Sitnikovski <[email protected]> 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 <[email protected]>
> > > 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 <[email protected]> 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 <[email protected]>
> > >>> 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