Re: [RFC] [Discussion] Add new function `array_group`

From: Date: Tue, 30 May 2023 14:57:22 +0000
Subject: Re: [RFC] [Discussion] Add new function `array_group`
References: 1  Groups: php.internals 
Request: Send a blank email to internals+get-120458@lists.php.net to get a copy of this message
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 <buritomath@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 >

« previous php.internals (#120458) next »